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.
$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 ';'}}
}
Pour les utilisateurs de Google, un autre moyen d’obtenir une liste d’utilisateurs est d’utiliser:
Get-WmiObject -Class Win32_UserAccount
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
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