Get-LocalGroupMember генерирует ошибку для группы администраторов

Следующие команды выполняются на виртуальной машине Windows 10, которая присоединена к AzureAD:

PS C:\Windows\system32> Get-LocalGroupMember - Администраторы группы
Get-LocalGroupMember: не удалось сравнить два элемента в массиве. В строке:1 символ:1

PS C:\Windows\system32> Get-LocalGroupMember -Group Пользователи
Group NT AUTHORITY\ Аутентифицированные пользователи неизвестны
Group NT AUTHORITY\INTERACTIVE Неизвестный

PS C:\Windows\system32> администраторы локальной локальной сети
члены
Администратор AzureAD\UserName

Есть идеи, почему команда PowerShell Get-LocalGroupMember генерирует ошибку в группе "Администраторы", тогда как net localgroup работает так же, как Get-LocalGroupMember для группы "Пользователи"?

5 ответов

Решение

На это ссылаются как на официальную ошибку:

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/

Это вызвано пустыми идентификаторами в группе администраторов. Откройте группу «Администраторы» и удалите пустые идентификаторы, оставшиеся после присоединения или выхода из домена. До и После очистки группы администраторов

PS C:\WINDOWS\system32> Get-LocalGroupMember -Group «Администраторы» Get-LocalGroupMember: не удалось сравнить два элемента в массиве. В строке:1 символ:1

  • Get-LocalGroupMember — группа «Администраторы»
  •           + CategoryInfo          : NotSpecified: (:) [Get-LocalGroupMember], InvalidOperationException
      + FullyQualifiedErrorId : An unspecified error occurred.,Microsoft.PowerShell.Commands.GetLocalGroupMemberCommand
    
    
    

PS C:\WINDOWS\system32> Get-LocalGroupMember -Группа «Администраторы»

Имя объектного класса PrincipalSource


Пользователь MyMachine\Администратор, Локальный
пользователь NA\otheradmin AzureAD

Пожалуйста, сейчас работаю над тем, как очистить все пустые идентификаторы из групп.

Изменен приведенный выше сценарий, чтобы удалить пустые идентификаторы SID и сообщить об этом кому-либо еще. Локальных пользователей, присоединившихся к AzureAD (локально) с помощью ADFS, можно удалить (задается в диспетчере объявлений или конечных точек Azure).

      $administrators = @(
([ADSI]"WinNT://./Administrators").psbase.Invoke('Members') |
% { 
 $_.GetType().InvokeMember('AdsPath','GetProperty',$null,$($_),$null) 
}
) -match '^WinNT';

$administrators = $administrators -replace "WinNT://",""

#$administrators

foreach ($administrator in $administrators)
{
#write-host $administrator "got here"
if ($administrator -like "$env:COMPUTERNAME/*" -or $administrator -like "AzureAd/*")
{
    continue;
}
elseif ($administrator -match "S-1") #checking for empty/orphaned SIDs only
{
write-host $administrator
Remove-LocalGroupMember -group "administrators" -member $administrator
}
write-host $administrator "check this users permissions if set in endpoint manager"
}

Это очистит сломанных администраторов. Я думаю, что они были созданы в процессе обновления:

(скрипт 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
}

Проблема заключается в пустых идентификаторах SID в группе администраторов, вызванных присоединением/выходом/присоединением к домену и т. д.

Удалите пустые идентификаторы, и команда будет работать нормально.

Другие вопросы по тегам