问题描述
要尝试获取所有可能的值,我尝试将它们全部打印出来,我认为这是一种获取我感兴趣的值的简单方法。但是,我有兴趣确定帐户是否被禁用,并且似乎我该值不适用于本地帐户吗?这看起来很疯狂,所以我一定想念一些东西。任何帮助将不胜感激。
我已经检查了here,但是没有定义标志,我尝试了明显的操作(“已禁用”,“已启用”),但是正如我所说的没有运气,我从下面的结果中看不到任何明显的东西。
$user_adsi = [ADSI]"WinNT://$ComputerName"
$users = $user_adsi.Children | where { $_.SchemaClassName -eq 'user' } | select *
try
{
foreach ($user in $users)
{
Write-Host $user
}
}
解决方法
您需要检查UserFlags
属性的二进制位,以表示禁用用户的十进制2
。
$disabledUsers = $user_adsi.Children |
where { $_.SchemaClassName -eq 'user' -and $_.UserFlags[0] -band 2}
由于UserFlags
(类似于UserAccountControl
)的类型为PropertyValueCollection
,因此您需要索引到其第一个元素[0]
。
您还可以使用Where()
方法创建两个禁用和启用用户列表:
$DisabledUsers,$EnabledUsers = $user_adsi.children.where({$_.SchemaClassName -eq 'user'}).where({$_.UserFlags[0] -band 2},'Split')
Split
模式会将满足条件的项目输出到第一个变量($DisabledUsers
)中,并将其余项目输出到第二个变量($EnabledUsers
)中。