Get-LocalGroupMember генерирует ошибку для группы администраторов
Следующие команды выполняются на виртуальной машине Windows 10, которая присоединена к AzureAD:
PS C:\Windows\system32> Get-LocalGroupMember - Администраторы группы
Get-LocalGroupMember: не удалось сравнить два элемента в массиве. В строке:1 символ:1PS 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 в группе администраторов, вызванных присоединением/выходом/присоединением к домену и т. д.
Удалите пустые идентификаторы, и команда будет работать нормально.