powershell-liste des utilisateurs locaux et de leurs groupes

je voudrais avoir un rapport avec tous les utilisateurs locaux et leurs groupes relatifs (utilisateurs, utilisateurs de pouvoir, Administrateurs et ainsi de suite.

je reçois les utilisateurs de cette manière:

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

mais je ne sais pas comment récupérer leurs groupes. Merci à l'avance.

19
demandé sur rmtheis 2010-12-28 21:40:36

4 réponses

$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 ';'}}
}
27
répondu Shay Levy 2010-12-29 14:03:09

Pour les Googlers, une autre façon d'obtenir une liste des utilisateurs est d'utiliser:

Get-WmiObject -Class Win32_UserAccount

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

29
répondu mjswensen 2013-11-25 23:36:53

mise à Jour comme une alternative à la réponse idéale à partir de 2010:

Vous pouvez maintenant utiliser le LocalGroupMember, LocalGroup, LocalUser etc. pour obtenir et carte des utilisateurs et des groupes

Exemple:

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

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

vous pouvez combiner cela avec Get-LocalUser. Alias glu peut également être utilisé à la place. Alias existe pour la majorité des nouveaux cmndlets.

au cas où certains se demandent (je sais que vous n'avez pas demandé ce) Ajouter des utilisateurs pourrait par exemple être fait comme ceci:

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

New-LocalUser $user -Password (ConvertTo-SecureString $pwd -AsPlainText -Force) -FullName $userName -Description $description
13
répondu Iris Classon 2018-01-31 19:03:23

en développant la réponse de mjswensen, la commande sans filtre peut prendre des minutes, mais la commande filtrée est presque instantanée.

PowerShell - la Liste des comptes d'utilisateur

Rapide

Get-WmiObject -Class Win32_UserAccount -Filter  "LocalAccount='True'" | select name, fullname

temps

Get-WmiObject -Class Win32_UserAccount |? {$_.localaccount -eq $true} | select name, fullname
0
répondu KERR 2018-09-07 06:21:33