web-dev-qa-db-fra.com

powershell - liste les utilisateurs locaux et leurs groupes

J'aimerais avoir un rapport avec tous les utilisateurs locaux et leurs groupes relatifs (utilisateurs, utilisateurs privilégiés, administrateurs, etc.).

Je reçois les utilisateurs de cette façon:

$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 d'avance. 

21
Nicola Cossu
$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 ';'}}
}
29
Shay Levy

Pour les utilisateurs de Google, un autre moyen d’obtenir une liste d’utilisateurs est d’utiliser:

Get-WmiObject -Class Win32_UserAccount

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

33
mjswensen

Mise à jour comme alternative à l'excellente réponse de 2010:

Vous pouvez maintenant utiliser Get-LocalGroupMember, Get-LocalGroup, Get-LocalUser etc. pour obtenir et mapper 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. Les alias existent pour la majorité des nouveaux cmndlets.

Au cas où certains se poseraient des questions (je sais que vous n'avez pas posé de question à ce sujet) Ajouter des utilisateurs pourrait par exemple se faire comme suit:

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

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

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

PowerShell - Répertorier les comptes d'utilisateurs locaux

Moyen rapide

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

Voie lente

Get-WmiObject -Class Win32_UserAccount |? {$_.localaccount -eq $true} | select name, fullname
0
KERR