Ах, радости от попыток получить доступ к сетевым ресурсам с удаленного компьютера. Вы потеряете все, что связано с учетной записью домена, делая то, что вы делаете. Это просто, как это работает. Хорошей новостью является то, что есть еще способ получить нужную информацию, и вы даже можете использовать Get-WmiObject
, если хотите. Если вы еще не переименовали группу «Администраторы» (потому что на самом деле, кто это делает?), Вы можете сделать это легко, но если вы это сделали и вам нужно искать группу по SID, как вы выше, вам придется запросить удаленный сервер, как вы, и внесите коррективы с помощью запроса ниже с измененным именем, которое вы получите. Вот что я бы порекомендовал сделать, используя вместо этого класс Win32_GroupUser:
Get-WmiObject -ComputerName $Server -Query "SELECT * FROM win32_GroupUser WHERE GroupComponent = ""Win32_Group.Domain='$computerName',Name='Administrators'"""
Чтобы поместить это вместо того, что у вас есть для вашей функции, это может выглядеть примерно так:
function Get-LocalAdminGroupMember {
param(
[String] $computerName,
[System.Management.Automation.PSCredential] $credential
)
$params = @{
"ComputerName" = $computerName
"Query" = "SELECT * FROM win32_GroupUser WHERE GroupComponent = ""Win32_Group.Domain='$computerName',Name='Administrators'"""
}
if ( $credential ) {
if ( $computerName -eq [Net.Dns]::GetHostName() ) {
Write-Warning "The -Credential parameter is ignored for the current computer."
}
else {
$params.Add("Credential", $credential)
}
}
Get-WmiObject @params |
Where{$_.PartComponent -match ':(.+?)\.Domain="(.+?)",Name="(.+?)"'}|
ForEach{
[PSCustomObject]@{
"ComputerName"=$computerName
"Name"='Administrators'
"Member"=$Matches[2..3] -join '\' -replace "^$computerName\\"
"Type"=$Matches[1]
}
}
}