我是Powershell的新手。我试图找出所有本地/域用户 来自不同Windows机器的所有本地组。
我为此找到了以下脚本。当我在Windows 7 Ultimate中运行此脚本时,它不会获取此计算机中找到的本地组的任何成员属性(例如,名称,路径)。
Invoke-Command -ScriptBlock {
[ADSI]$S = "WinNT://$($env:computername)"
$S.children.where({$_.class -eq 'group'}) |
Select @{Name="Members";Expression={
[ADSI]$group = "$($_.Parent)/$($_.Name),group"
$members = $Group.psbase.Invoke("Members")
($members | ForEach-Object {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}) -join ";"}
}
} | Select Members
似乎下面的代码行不起作用(不提取用户的属性(例如名称))
ForEach-Object {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}) -join ";"}
相同的脚本在Windows 10和Windows 2012中运行良好。
我事先感谢你的帮助。
答案 0 :(得分:0)
这个问题已经回答here。从链接中复制答案。
您的脚本存在许多问题,这些问题会导致不同系统和版本的不良行为。
这是一种适用于任何地方的通用方法。不要使用Invoke-Command。 ADSI远程工作正常。
$computer = $env:computername
$groups = ([ADSI]"WinNT://$computername").Children | Where{$_.class -eq 'group'}
foreach($group in $groups){
$group.Invoke("Members") |
ForEach-Object {
$type = $_.GetType()
$name = $type.InvokeMember('Name', 'GetProperty', $null, $_, $null)
[pscustomobject]@{Group=$group.Name[0];Account=$name}
}
}