Utenti e gruppi locali
Il modulo Microsoft.PowerShell.LocalAccounts gestisce gli account locali di Windows. Richiede console amministratore per le modifiche.
In PowerShell 7 su Windows il modulo funziona tramite compatibilità; se non è disponibile, importalo con Import-Module Microsoft.PowerShell.LocalAccounts -UseWindowsPowerShell.
Utenti
Get-LocalUser
Get-LocalUser -Name Michele
Get-LocalUser | Select-Object Name, Enabled, LastLogon, PasswordLastSet, PasswordExpires
Get-LocalUser | Where-Object Enabled
Creare un utente
$pw = Read-Host "Password" -AsSecureString
New-LocalUser -Name "tecnico" -Password $pw -FullName "Utente Tecnico" -Description "Account di supporto"
New-LocalUser -Name "tecnico" -Password $pw -PasswordNeverExpires -UserMayNotChangePassword
La password va richiesta come SecureString, non scritta in chiaro negli script.
Modificare
Set-LocalUser -Name "tecnico" -Description "Nuova descrizione"
Set-LocalUser -Name "tecnico" -Password $pw
Set-LocalUser -Name "tecnico" -PasswordNeverExpires $true
Disable-LocalUser -Name "tecnico"
Enable-LocalUser -Name "tecnico"
Rename-LocalUser -Name "tecnico" -NewName "supporto"
Remove-LocalUser -Name "supporto"
Gruppi
Get-LocalGroup
Get-LocalGroupMember -Group "Administrators"
Get-LocalGroupMember -Group "Administrators" | Select-Object Name, ObjectClass, PrincipalSource
Add-LocalGroupMember -Group "Administrators" -Member "tecnico"
Remove-LocalGroupMember -Group "Administrators" -Member "tecnico"
New-LocalGroup -Name "Supporto" -Description "Gruppo di supporto"
Remove-LocalGroup -Name "Supporto"
I nomi dei gruppi predefiniti dipendono dalla lingua di Windows ("Administrators" o "Administratori" in italiano). Per essere indipendenti dalla lingua, usa il SID:
Get-LocalGroupMember -SID "S-1-5-32-544"
Add-LocalGroupMember -SID "S-1-5-32-544" -Member "tecnico"
SID noti: S-1-5-32-544 Administrators, S-1-5-32-545 Users, S-1-5-32-555 Remote Desktop Users.
Aggiungere un utente di dominio a un gruppo locale
Add-LocalGroupMember -Group "Administrators" -Member "DOMINIO\mario.rossi"
Add-LocalGroupMember -Group "Remote Desktop Users" -Member "DOMINIO\Gruppo-Supporto"
Audit rapido degli amministratori locali
Get-LocalGroupMember -SID "S-1-5-32-544" | Select-Object Name, ObjectClass, PrincipalSource
Get-LocalUser | Where-Object { $_.Enabled -and $_.PasswordLastSet -lt (Get-Date).AddDays(-180) } | Select-Object Name, PasswordLastSet
Su più computer:
Invoke-Command -ComputerName PC01, PC02 -ScriptBlock { Get-LocalGroupMember -SID "S-1-5-32-544" } | Select-Object PSComputerName, Name
Account integrato Administrator
Get-LocalUser | Where-Object SID -like "*-500"
Disable-LocalUser -SID (Get-LocalUser | Where-Object SID -like "*-500").SID
Il suo SID termina sempre in -500, anche se è stato rinominato.
Sessioni e profili
quser
logoff 2
Get-CimInstance Win32_UserProfile | Select-Object LocalPath, LastUseTime, Loaded
Get-CimInstance Win32_UserProfile | Where-Object { -not $_.Special -and $_.LastUseTime -lt (Get-Date).AddDays(-90) }
L'eliminazione di profili va fatta con cura: Remove-CimInstance su Win32_UserProfile elimina anche la cartella dell'utente.
Politiche delle password locali
net accounts
net accounts /minpwlen:12 /maxpwage:90
Strumento grafico
lusrmgr.msc
Non disponibile nelle edizioni Home di Windows.