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
您可以使用 WMI 查詢來獲取 AccountType(512 = 啟用,514 = 禁用):
編輯:還有其他標誌表示啟用的帳戶,但基本啟用/禁用的是 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