Я смотрю, вы не пошли по пути remote execution и вам хочется боли ? :)
Тогда вот, берегите глаза
$Computername = 'xxx'
Get-CimInstance Win32_Group -filter "LocalAccount='True' and SID='S-1-5-32-555'" -ComputerName $Computername |
Select-Object PSComputername,Name,@{Name="Members";Expression={
(Get-CimAssociatedInstance -InputObject $_ -ResultClassName Win32_UserAccount).Name
}}
или в переводе на WMI
$Computername = 'xxx'
Get-WMIObject Win32_Group -filter "LocalAccount='True'and SID='S-1-5-32-555'" -ComputerName $Computername|
Select-Object PSComputername,Name,@{Name="Members";Expression={
$_.GetRelated("Win32_UserAccount").Name
}}
Здесь будут только пользователи. Для вложенных групп надо ещё подкрутить :)
Upd:
Ладно, не буду больше томить, нашёл альтернативный вариант
Во времена PSv2 ещё написал, когда не было встроенной
function Get-LocalGroupMember {
param(
[Parameter(ValueFromPipeline=$false, Position=0)]
[string[]]$GroupName = 'Administrators',
[Parameter(ValueFromPipeline=$true)]
[string[]]$ComputerName = '.'
)
PROCESS {
foreach ($computer in $ComputerName) {
foreach ($group in $GroupName) {
$grp = [ADSI]"WinNT://$computer/$group,group"
Write-Verbose ('Group: ' + $grp.Path) # test for existance
$members = @($grp.psbase.Invoke("Members"))
if ($members) {
$members | Foreach-Object {
$name = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
$class = $_.GetType().InvokeMember("Class", 'GetProperty', $null, $_, $null)
$parent = $_.GetType().InvokeMember("Parent", 'GetProperty', $null, $_, $null) -replace 'WinNT://' -replace '.*/'
'' | Select-Object @{n='Class';e={$class}},@{n='Domain';e={$parent}},@{n='Name';e={$name}}
}
}
}
}
}
}
Только надо ещё знать имя группы, а оно может быть как на русском, так и на английском
Пользоваться можно так, на один из вариантов ругнётся, по второму выдаст инфу
Get-LocalGroupMember -ComputerName MySuperServer -GroupName 'Пользователи удаленного рабочего стола', 'Remote Desktop Users'