PowerShell:如何获取本地用户和本地组,但排除已禁用的帐户

PowerShell:如何获取本地用户和本地组,但排除已禁用的帐户

我得到了一个 PowerShell 命令,它为我提供了用户列表以及这些用户所属的组。唯一的问题是,它为我提供了所有用户,包括那些被禁用的用户。我需要能够仅列出活跃用户及其各自的组。任何帮助都将不胜感激。

$adsi = [ADSI]"WinNT://$env:COMPUTERNAME"
$adsi.Children | where {$_.SchemaClassName -eq 'user'} | Foreach-Object {    $groups = $_.Groups() | Foreach-Object {$_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null)} ; $_ | Select-Object @{n='UserName';e={$_.Name}},@{n='Groups';e={$groups -join ';'}} } | Format-Table -autosize -wrap

答案1

您可以使用 WMI 查询来获取 AccountType (512 = Enabled、514 = Disabled):

编辑:还有其他标志指示已启用的帐户,但基本的启用/禁用是 512/514。请参阅此列表

第三次尝试:

Function Check-Enabled ($Username) {
   -not (Get-WmiObject Win32_UserAccount -filter "LocalAccount=True AND Name='$Username'").disabled
}

然后将属性添加到您的Select-Object。我还根据自己的可读性对其进行了格式化,但仍然是相同的代码:

$adsi = [ADSI]"WinNT://$env:COMPUTERNAME"
$adsi.Children | where { $_.SchemaClassName -eq 'user' } | Foreach-Object {
   $groups = $_.Groups() | Foreach-Object {
      $_.GetType().InvokeMember('Name', 'GetProperty', $null, $_, $null)
   }
   $_ | Select-Object @{n='UserName';e={$_.Name}},
                      @{n='Groups';e={$groups -join ';'}},
                      @{n='Enabled';e={Check-Enabled $_.Name}}
} | Format-Table -autosize -wrap

答案2

使用 WMI 更加简单的方法

Get-WmiObject -Class win32_useraccount -filter "localaccount=true" | where {$_.disabled -eq $False}

答案3

从 5.1 版开始,PowerShell 还附带了一个名为Get-LocalUser Powershell 本地帐户

Get-LocalUser | Where-Object -Property Enabled -eq True

答案4

语法是:

Get-LocalUser | Where-Object -Property Enabled -like true

Get-LocalUser | Where-Object -Property Enabled -like false

-eq 运算符不输出已禁用的帐户

相关内容