无法获取本地用户的状态(禁用)

时间:2014-06-10 23:38:49

标签: powershell powershell-v2.0 powershell-v3.0

我正在尝试获取具有组成员身份和已禁用状态的本地用户列表。我有一些成功,但无法获得每个本地用户的相应禁用状态。我正在将WMI与ADSI结合使用以获取本地用户的禁用状态。 ADSI不提供“禁用状态”属性。因为,我是PS新手任何替代选项或解释将不胜感激。仅供参考:这些是独立服务器而非成员服务器

$adsi = [ADSI]"WinNT://$env:computername"
$user = $adsi.Children | where {$_.SchemaClassName -eq 'user'}
$user| Foreach-Object {
    $g1 = $_.Groups() | Foreach-Object {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
    $s1 = gwmi -ClassName Win32_UserAccount -Filter “LocalAccount = $true” | % { $_.Disabled}
    $_ | Select-Object  @{n='UserName';e={$_.Name}},
    @{n='Groups';e={$g1 -join ';'}},
    @{n='LastLogin';e={$_.LastLogin}},
    @{n='DisabledSatus';e={$s1 -join ''}}    
       }

输出:

UserName                        Groups                          LastLogin                       Disabled                        
--------                        ------                          ---------                       -----                         
Administrator                   Administrators                  6/5/2012 5:18:54 PM             OKOKDegradedOKOKOKOKOKOKDeg...
TestUser                Users               10/10/2013 7:11:22 PM       OKOKDegradedOKOKOKOKOKOKDeg..

1 个答案:

答案 0 :(得分:1)

两个变化。我会在ForEach-Object循环的顶部添加此内容:

$currentuser = $_

并将$s行更改为:

$s1 = gwmi -ClassName Win32_UserAccount -Filter “LocalAccount = $true” | ? {$_.Name -eq $currentuser.Name} | % { $_.Disabled}