无法从Windows 7旗舰版中的用户[ADSI]获取属性(例如,名称,路径)

时间:2018-02-20 06:31:50

标签: powershell-v3.0 adsi

我是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中运行良好。

我事先感谢你的帮助。

1 个答案:

答案 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}
        }
}