Подтвердить что ты не робот

Powershell - список локальных пользователей и их групп

Я хотел бы иметь отчет со всеми локальными пользователями и их относительными группами (пользователями, пользователями с полномочиями, администраторами и т.д.).

Я получаю пользователей таким образом:

$adsi = [ADSI]"WinNT://."
$adsi.psbase.children | where {$_.psbase.schemaClassName -match "user"} | select @{n="Name";e={$_.name}}

но я не знаю, как получить их группы. Заранее спасибо.

4b9b3361

Ответ 1

$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 ';'}}
}

Ответ 2

Для гуглеров можно использовать другой способ получить список пользователей:

Get-WmiObject -Class Win32_UserAccount

Из http://buckeyejeeps.com/blog/?p=764

Ответ 3

Обновление в качестве альтернативы отличному ответу с 2010 года:

Теперь вы можете использовать Get-LocalGroupMember, Get-LocalGroup, Get-LocalUser и т.д., чтобы получать и сопоставлять пользователей и группы.

Пример:

PS C:\WINDOWS\system32> Get-LocalGroupMember -name users

ObjectClass Name                             PrincipalSource 
----------- ----                             --------------- 
User        DESKTOP-R05QDNL\someUser1        Local           
User        DESKTOP-R05QDNL\someUser2        MicrosoftAccount
Group       NT AUTHORITY\Authenticated Users Unknown         
Group       NT AUTHORITY\INTERACTIVE         Unknown  

Вы можете комбинировать это с Get-LocalUsers. Можно также использовать псевдоним glu. Псевдонимы существуют для большинства новых cmndlets.

В случае, если некоторые задаются вопросом (я знаю, что вы не спрашивали об этом) Добавление пользователей может быть выполнено следующим образом:

$description = "Netshare user"
$userName = "Test User"
$user = "test.user"
$pwd = "pwd123"

New-LocalUser $user -Password (ConvertTo-SecureString $pwd -AsPlainText -Force) -FullName $userName -Description $description