Назад | Перейти на главную страницу

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

Начиная с версии 5.1 PowerShell также поставляется со встроенным командлетом под названием Get-LocalUser Локальные учетные записи Powershell

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

Намного более простой способ с WMI

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