users - listar usuarios de un grupo active directory powershell
powershell-lista de usuarios locales y sus grupos (4)
Me gustaría tener un informe con todos los usuarios locales y sus grupos relativos (usuarios, usuarios avanzados, administradores, etc.).
Obtengo los usuarios de esta manera:
$adsi = [ADSI]"WinNT://."
$adsi.psbase.children | where {$_.psbase.schemaClassName -match "user"} | select @{n="Name";e={$_.name}}
pero no sé cómo recuperar sus grupos. Gracias por adelantado.
Ampliando la respuesta de mjswensen, el comando sin el filtro podría tomar minutos, pero el comando filtrado es casi instantáneo.
PowerShell - Lista de cuentas de usuarios locales
Manera rápida
Get-WmiObject -Class Win32_UserAccount -Filter "LocalAccount=''True''" | select name, fullname
Camino lento
Get-WmiObject -Class Win32_UserAccount |? {$_.localaccount -eq $true} | select name, fullname
Para los Googlers, otra forma de obtener una lista de usuarios es usar:
Get-WmiObject -Class Win32_UserAccount
Actualización como alternativa a la excelente respuesta de 2010:
Ahora puede usar Get-LocalGroupMember, Get-LocalGroup, Get-LocalUser, etc. para obtener y asignar usuarios y grupos.
Ejemplo:
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
Podrías combinar eso con Get-LocalUser. Alias glu también se puede utilizar en su lugar. Los alias existen para la mayoría de los nuevos cmndlets.
En caso de que algunos se estén preguntando (sé que no preguntaron acerca de esto), por ejemplo, agregar usuarios podría ser así:
$description = "Netshare user"
$userName = "Test User"
$user = "test.user"
$pwd = "pwd123"
New-LocalUser $user -Password (ConvertTo-SecureString $pwd -AsPlainText -Force) -FullName $userName -Description $description
$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 '';''}}
}