获取SID时遇“Identity参数无法验证”错误的技术求助
问题分析与解决
核心问题
你遇到的报错是因为$tmpID是一个包含SID属性的自定义对象,而非直接的SID字符串值。当你把这个对象传给Get-ADUser的-Identity参数时,PowerShell无法正确解析出有效的标识值,导致参数验证失败。
解决方案
修改Get-ADGroupMember后的管道操作,直接提取SID的属性值,而非保留对象:
foreach ($item in $tmpList){ # 使用-ExpandProperty直接获取SID字符串 $tmpID = Get-ADGroupMember -Server $server -Identity $item.Name | Select-Object -ExpandProperty SID | Select-Object -First 1 if (!$tmpID) { # somecode } else{ $tmpSurname = Get-ADUser -Server $server -Identity $tmpID -Properties Surname } }
或者,如果你不想修改$tmpID的获取逻辑,也可以在调用Get-ADUser时明确指定SID属性:
$tmpSurname = Get-ADUser -Server $server -Identity $tmpID.SID -Properties Surname
原因解释
原代码中Select-Object SID返回的是一个PSCustomObject,这个对象只有SID这一个属性。手动运行时你可能是查看了对象的SID属性值,但代码中直接将这个对象传给-Identity参数时,PowerShell无法自动将对象转换为参数所需的字符串/标识类型,从而触发"Identity属性为空"的验证错误。
而使用-ExpandProperty SID会直接返回SID的字符串值,这样$tmpID就是符合Get-ADUser参数要求的有效标识,不会再报错。
内容的提问来源于stack exchange,提问作者Maira
相关产品推荐
相关产品推荐

