以下命令在已加入 AzureAD 的 Windows 10 VM 上运行:
PS C:\Windows\system32> Get-LocalGroupMember -Group Administrators
Get-LocalGroupMember:无法比较数组中的两个元素。第 1 行,字符:1PS C:\Windows\system32> Get-LocalGroupMember -Group 用户
组 NT AUTHORITY\Authenticated Users 未知
组 NT AUTHORITY\INTERACTIVE 未知PS C:\Windows\system32> net localgroup Administrators
成员
管理员 AzureAD\UserName
知道为什么 PowerShell Get-LocalGroupMember 命令会在管理员组上生成错误,而 net localgroup 却像 Get-LocalGroupMember 对用户组一样工作吗?
答案1
这已被引用为一个官方错误:
https://github.com/PowerShell/PowerShell/issues/2996
解决方法如下:
http://jdhitsolutions.com/blog/scripting/2342/query-local-administrators-with-cim/
更新:
我遇到了一些 CIM 和 WMI 问题。
这是对我来说有效的另一种解决方法。
https://p0w3rsh3ll.wordpress.com/2016/06/14/any-documented-adsi-changes-in-powershell-5-0/
答案2
这是由管理员组中的空 sid 引起的。打开管理员组并删除域加入/离开时留下的空 sid。清理管理员组之前和之后
PS C:\WINDOWS\system32> Get-LocalGroupMember -Group "Administrators" Get-LocalGroupMember : 无法比较数组中的两个元素。行号:1 字符:1
- 获取本地组成员-组“管理员”
-
+ CategoryInfo : NotSpecified: (:) [Get-LocalGroupMember], InvalidOperationException + FullyQualifiedErrorId : An unspecified error occurred.,Microsoft.PowerShell.Commands.GetLocalGroupMemberCommand
PS C:\WINDOWS\system32> Get-LocalGroupMember -Group“管理员”
对象类名称 PrincipalSource
用户 MyMachine\Administrator 本地
用户 NA\otheradmin AzureAD
不用客气,我们现在正在想办法清理群组中所有空的 SID。
答案3
这将清理损坏的管理员。我认为它们是在更新过程中创建的:
(PowerShell 脚本)
$administrators = @(
([ADSI]"WinNT://./Administrators").psbase.Invoke('Members') |
% {
$_.GetType().InvokeMember('AdsPath','GetProperty',$null,$($_),$null)
}
) -match '^WinNT';
$administrators = $administrators -replace "WinNT://",""
$administrators
foreach ($administrator in $administrators)
{
if ($administrator -like "$env:COMPUTERNAME/*" -or $administrator -like "AzureAd/*")
{
continue;
}
Remove-LocalGroupMember -group "administrators" -member $administrator
}
答案4
该问题是由于域加入/离开/加入等导致管理员组中的 SID 为空。
删除空的 sid 后命令就可以正常工作了。