У меня есть команда 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}