我正在尝试获取具有组成员身份和已禁用状态的本地用户列表。我有一些成功,但无法获得每个本地用户的相应禁用状态。我正在将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..
答案 0 :(得分:1)
两个变化。我会在ForEach-Object
循环的顶部添加此内容:
$currentuser = $_
并将$s
行更改为:
$s1 = gwmi -ClassName Win32_UserAccount -Filter “LocalAccount = $true” | ? {$_.Name -eq $currentuser.Name} | % { $_.Disabled}