ADSI Edit中SID归属查询及PowerShell转换方法咨询
SID 转换与账户添加问题解决
一、查询SID对应的所属对象
- 本地SID:
用PowerShell查询本地用户/组:
或者通过WMI查询:# 查询本地用户 Get-LocalUser | Where-Object {$_.SID -eq "你的SID"} # 查询本地组 Get-LocalGroup | Where-Object {$_.SID -eq "你的SID"}Get-WmiObject Win32_SID -Filter "SID='你的SID'" - 域SID:
先确保成员服务器安装了RSAT-AD-PowerShell模块,然后执行:
也可以直接转成账户名快速确认:Get-ADUser -Identity "你的SID" # 如果是组,替换为Get-ADGroup Get-ADGroup -Identity "你的SID"([System.Security.Principal.SecurityIdentifier]"你的SID").Translate([System.Security.Principal.NTAccount]).Value
二、PowerShell完成SID转换
1. SID转账户名
直接用.NET类完成转换,支持本地/域对象:
$targetSID = "S-1-5-21-xxxxxx-xxxxxx-xxxxxx-1001" $accountName = ([System.Security.Principal.SecurityIdentifier]$targetSID).Translate([System.Security.Principal.NTAccount]).Value $accountName # 输出格式为「域\用户名」或「计算机名\用户名」
2. 账户名转SID(反向转换)
如果需要从账户名得到SID:
$targetAccount = "CORP\JohnDoe" $sidValue = ([System.Security.Principal.NTAccount]$targetAccount).Translate([System.Security.Principal.SecurityIdentifier]).Value $sidValue
三、成员服务器添加账户到角色的解决方案
如果直接用SID无法执行添加操作,先把SID转成账户名再操作,以添加到本地管理员组为例:
# 1. 转换SID为账户名 $sid = "S-1-5-21-xxxxxx-xxxxxx-xxxxxx-1001" $account = ([System.Security.Principal.SecurityIdentifier]$sid).Translate([System.Security.Principal.NTAccount]).Value # 2. 添加到目标角色/组 Add-LocalGroupMember -Group "Administrators" -Member $account
替代方案(适用于低版本PowerShell)
如果Add-LocalGroupMember不可用,用CMD命令替代:
net localgroup Administrators $account /add
注意事项
- 域账户操作时,成员服务器必须能正常连接域控,确保网络、DNS解析正常
- 若SID无法解析,检查该AD对象是否已被删除,或者当前账号是否有查询域对象的权限
- 本地操作需要管理员权限运行PowerShell
内容的提问来源于stack exchange,提问作者jimmyafflick
相关产品推荐
相关产品推荐

