我得到了一个 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 运算符不输出已禁用的帐户