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.
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 ';'}}
}
Pour les Googlers, une autre façon d'obtenir une liste des utilisateurs est d'utiliser:
Get-WmiObject -Class Win32_UserAccount
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
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