Get-LocalGroupMember 为管理员组生成错误

Get-LocalGroupMember 为管理员组生成错误

以下命令在已加入 AzureAD 的 Windows 10 VM 上运行:

PS C:\Windows\system32> Get-LocalGroupMember -Group Administrators
Get-LocalGroupMember:无法比较数组中的两个元素。第 1 行,字符:1

PS 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 后命令就可以正常工作了。

相关内容