ADSI 查询,我试图找到用于识别本地帐户是否被禁用的标志

ADSI query, I am trying to find the flag for identifying if a local account is disabled

为了尝试获取所有可能的值,我尝试将它们全部打印出来,我认为这是一种获取我感兴趣的值的简单方法。但是我有兴趣确定一个帐户是否被禁用以及它在我看来,这个值不适用于本地帐户?这看起来很疯狂,所以我一定遗漏了一些东西。任何帮助将不胜感激。

我已经检查了 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)。