微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ADSI查询,我正在尝试查找用于标识是否禁用了本地帐户的标志

如何解决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 举报,一经查实,本站将立刻删除。