如何解决ADSI查询,我正在尝试查找用于标识是否禁用了本地帐户的标志
要尝试获取所有可能的值,我尝试将它们全部打印出来,我认为这是一种获取我感兴趣的值的简单方法。但是,我有兴趣确定帐户是否被禁用,并且似乎我该值不适用于本地帐户吗?这看起来很疯狂,所以我一定想念一些东西。任何帮助将不胜感激。
我已经检查了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
)中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。