Powershell

PowerShell:如何獲取本地使用者和本地組,但排除禁用的帳戶

  • September 20, 2021

我得到了一個 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

引用自:https://serverfault.com/questions/753582