Benvenuti alla parte 3 di 3 di PowerShell: una guida completa. Clicca i seguenti link per consultare la parte 1 e la parte 2.
In questo articolo finale combineremo i concetti appresi finora e dimostreremo alcuni utilizzi pratici di PowerShell. La shell di Microsoft può rendere la vita di un amministratore IT molto più semplice, consentendo di gestire l’infrastruttura con poco sforzo. PowerShell è un tool potentissimo per semplificare il management dei server, raccogliere informazioni sugli stessi e mostrarle in differenti formati.
Questa parte finale della guida introdurrà diversi nuovi concetti. Prenditi il tuo tempo e affronta ogni parte individualmente.
Che software sono installati sul mio sistema?
Digita Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize
Il comando sopra mostrerà gli applicativi installati sul tuo sistema. Se scomponi i comandi noterai che la struttura è piuttosto complessa:
- Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* – Questa parte del comando ordina a PowerShell di cercare in HKLM e navigare al percorso \Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall per raccogliere tutte le proprietà presenti. HKLM è il filesystem PowerShell per il registro!
- Il resto del comando raccoglie semplicemente dei dati specifici (DisplayName, DisplayVersion, Publisher, InstallDate) e li riproduce in una tabella.
Inoltre, puoi navigare per il registro direttamente dalla shell digitando cd HKLM:\ e quindi spostandoti per HKLM come col Command Prompt fra le cartelle di Windows.
Che aggiornamenti di Windows sono installati sul mio sistema?
Trovare informazioni sugli hotfix e gli aggiornamenti (KB) era molto complesso con PowerShell. Microsoft ha di recente introdotto il cmdlet Get-Hotfix: un potente strumento per interrogare l’infrastruttura e scoprire quali patch e aggiornamenti di Windows Update sono installati o per verificare se uno specifico hotfix è presente.
Pensate al caso in cui la scoperta di una vulnerabilità porti Microsoft a rilasciare una patch di sicurezza: per garantire la protezione dell’infrastruttura è fondamentale verificarne la presenza e in caso negativo installare la patch. Con questo cmdlet, una volta preparato lo script, basta qualche minuto per produrre una lista di server vulnerabili.
Digita Get-Hotfix | Format-table -autosize
Questo produrrà una lista dei KB installati sul tuo sistema.
Ora possiamo sfruttare le potenzialità della shell di interfacciarsi con una pluralità di macchine. Per fare questo introdurremo il PowerShell ISE (integrated scripting environment).
Aprite PowerShell ISE e digitate quanto segue nel pannello degli script. Quindi premete il pulsante play per eseguire lo script. Avrete bisogno di un file di testo con i vostri server come quello creato nella parte 2 della guida. Come reminder, ecco il contenuto che avevamo creato:
Ora digitate in PowerShell ISE:
$servers = get-content c:\temp\test.txt
foreach ($server in $servers)
{Get-HotFix -ComputerName $server | Select-Object PSComputername, HOTFIXiD, Installedon | Sort-Object -Property InstalledOn -Descending}
Questo restituirà tutti i KB installati sui server The-Solving-N1, The-Solving-N2 and The-Solving-N3:
Se devi verificare la presenza di uno specifico KB, per esempio KB2977629, devi aggiungere il cmdlet Where-object HotfixID -eq “KB2977629” allo script.
inserisci:
$servers = get-content c:\temp\test.txt
foreach ($server in $servers)
{Get-HotFix -ComputerName $server | Where-object HotfixID -eq “KB2977629” | Select-Object PSComputername, HOTFIXiD, Installedon | Sort-Object -Property InstalledOn -Descending}
Come posso cercare gli errori nell’Event Log?
L’Event Log è uno strumento fondamentale per rilevare problemi di sistema. PowerShell può migliorare molto l’efficienza delle ricerche nel log.
digita Get-Eventlog system -Newest 30 | Where-Object {$_.entryType -Match “Error”} | format-table -AutoSize
Il comando appena mostrato cercherà nel log SYSTEM e mostrerà i 30 errori più recenti. Puoi facilmente cambiare l’Event Log con Application o Security.
PowerShell e Active Directory
PowerShell può interagire con qualsiasi sotto-sistema di Windows. Risulta particolarmente utile quando adottata per interrogare Active Directory. Di seguito trovi una selezione di script interessanti ma, prima di vederli, devi verificare la presenza del modulo Active Directory abilitato nella shell. Il modo più semplice è eseguire questi comandi sul domain controller, tuttavia, qualora non fosse possibile, puoi anche aggiungere il ruolo al tuo sistema che deve però far parte del dominio dal quale vuoi estrarre le informazioni.
Digita Add-WindowsFeature RSAT-AD-PowerShell
Completata l’installazione puoi usare la shell per raccogliere informazioni e modificare il dominio Active Directory. Procedi con cautela nel caso tu stia lavorando su un ambiente di produzione.
Dato che la lista di comandi è piuttosto vasta, abbiamo raggruppato per categoria i cmdlets che reputiamo più utili. Puoi sempre lanciare il comando get-help per approfondire nel dettaglio questi cmdlet.
Query Utente
Interrogare gli account utente è molto semplice in PowerShell. I commandi nella tabella di seguito spiegano come cercare degli utenti, individuare quelli con password non-compliant, lock-out, disabilitati e via dicendo.
PowerShell Command | What is does | Category |
---|---|---|
Get-ADUser -Filter * -Properties * | where { $_.whenCreated -ge $week } | select Name,whenCreated | Sort Name | Utenti creati nell’ultima settimana, ordinati per nome | USERS |
Get-ADUser -Filter * -Properties PasswordNeverExpires | where { $_.PasswordNeverExpires -eq $true } | select Name | sort Name | Utenti con password configurate “senza scadenza”, ordinati per nome | USERS |
Get-ADUser -Filter “Enabled -eq ‘$false'” | Select Name, UserPrincipalName | Sort name | Utenti con account INATTIVI, mostra nome e FQN, ordinati per nome | USERS |
Search-ADAccount -AccountDisabled -UsersOnly | FT Name,ObjectClass -A | Utenti con account DISABILITATI, mostra nome e FQN, ordinati per nome | USERS |
Search-ADAccount -LockedOut | Format-Table name,lastlogondate, lockedout, objectclass, passwordexpired, passwordneverexpires | Trova utenti con account locked | USERS |
Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly |Sort-Object | FT Name,ObjectClass -A | Trova account utente non utilizzati per 90 giorni | USERS |
Get-ADuser -Filter {name -like “*”} -properties *|select @{N=”Account”;E={$_.name}},@{N=”Name”;E={$_.givenname}},@{N=”LastName”;E={$_.surname}},@{N=”Mail”;E={$_.mail}},@{N=”AccountEnabled”;E={$_.enabled}},@{N=”MemberOf”;E={(Get-ADPrincipalGroupMembership $_).name -join (“`r`n”,”,,,,,”)}} | Sort-Object “Account” | FT -AutoSize | Gruppi di appartenenza per tutti gli utenti. Ordina i dati come tabella. Usa Export-CSV per restituire un file CSV. | USERS |
Get-ADUser -Filter * -Properties LastLogonDate | ? { $_.LastLogonDate -eq $null } | Select name,samaccountname
|
Trova gli utenti che non hanno mai eseguito il login | USERS |
Query Gruppi
L’appartenenza ad un Gruppo in Active Directory ha importanti ricadute sulla sicurezza. Per tale ragione è molto utile poter determinare rapidamente la presenza in gruppi per ogni utente, in modo da garantire la compliance alle policy di sicurezza interna.
Command | What it does | Category |
---|---|---|
get-adgroup -filter * -Properties GroupCategory | Select name, groupcategory | FT -A | Tutti i Gruppi presenti in Active Directory | GROUPS |
Get-ADGroupMember -identity “Administrators” -recursive | select name | Tutti gli utenti del gruppo Domain Administrators | GROUPS |
Get-ADPrincipalGroupMembership -identity Turbogeek | Sort-object | FT -property name, samaccountname -AutoSize | Trova i Gruppi ai quali appartiene un utente | GROUPS |
Get-ADGroupMember -Identity Domain Admins” -Recursive | %{Get-ADUser -Identity $_.distinguishedName -Properties Enabled | ?{$_.Enabled -eq $false}} | Select DistinguishedName,Enabled | Trova gli utenti disabilitati nel gruppo Domain Administrators | GROUPS |
Query Active Directory Infrastructure
Questi comandi forniscono informazioni riguardanti l’infrastruttura.
Command | What it does | Category |
---|---|---|
Get-ADDomainController -Filter * | Format-table name,domain, forest,site, ipv4address, operatingsystem | Trova i Domain controller del dominio | DC |
Get-ADDomainController -Filter {IsGlobalCatalog -eq $true} | Select-Object Name,ipv4address,isglobalcatalog, operatingsystem | FT -A | Trova i Global Catalog Server nel dominio, utile se hai più di un domain controller | DC |
Get-ADDomainController -Filter {IsReadOnly -eq $true} | Trova i domain controller read-only se applicabile all’infrastruttura (Branch Servers) | DC |
Get-ADComputer -Filter ‘Name -like “The-Solving-N1*”‘ -Properties canonicalName, CN, created, IPv4Address, objectclass, OperatingSystem, OperatingSystemServicePack | FT -A | Trova i computer nel dominio come “The-Solving-N1”, mostra informazioni utili in tabella | DC |
Get-ADForest | Select-Object -ExpandProperty ForestMode | Ottiene AD Forest level | DC |
Get-ADDomain | Select-Object -ExpandProperty domainmode | Ottieni AD Domain level | DC |
Get-ADReplicationConnection -Filter {AutoGenerated -eq $true} | Ottieni dettagli sulla replica del dominio. Saranno restituiti dati solo se presente più di un domain controller. | DC |
$datecutoff = (Get-Date) Get-ADComputer -Filter {LastLogonTimestamp -lt $datecutoff} -Properties Name,LastLogonTimeStamp| Select Name,@{N=’LastLogonTimeStamp’; E={[DateTime]::FromFileTime($_.LastLogonTimeStamp)}} |
Esegui questo script da PowerShell ISE. Configura il $datecutoff e questo indicherà l’orario dell’ultimo login di un computer. | DC |
Modifica Active Directory
Puoi anche utilizzare PowerShell per modificare il dominio Active Directory. Usa questi comandi con cautela, specie se sei alle prime armi con PowerShell.
Command | What it does | Category |
---|---|---|
Disable-ADaccount -identity The-Solving | Disabilita l’account The-Solving | USERS |
Enable-ADaccount -identity The-Solving | Abilita l’account The-Solving | USERS |
Set-ADAccountExpiriation -Identity The-Solving -datetime “07/01/2019” | Configura l’account The-Solving per scadere il 7 Gen 2019 | USERS |
Clear-ADAccountExpiration -identity The-Solving | Disabilitare la data di scadenza dell’account | USERS |
Set-ADAccountPassword -identity The-Solving -reset -newpassword (Convertto-Securestring -asplaintext “Passw0rd123!” -Force) | Cambia la password utente cifrando la trasmissione – essenziale | USERS |
Unlock-ADAccount -identity The-Solving | Sblocca l’account The-Solving | USERS |
New-AdGroup -Name “Test Users” -SamAccountName TestUser -GroupCategory Security -GroupScope Global -displayname ‘Test Users’ -Path “OU=Groups, OU=Resources, DC=TEST, DC=UK -Description “All Test Users” | Crea un Security Group chiamato Test Users nelle OU Groups > Resources | GROUPS |
Set-ADGroup -Identity ‘Test Users’ -groupcategory Distribution -groupscope Universal -Managedby ‘TurboGeek’ | Modifica il Gruppo Test Users e lo rende un gruppo universale di distribuzione, gestito da voi | GROUPS |
search-adaccount -lockedout | unlock-adaccount -passthru -confirm | Trova e sblocca tutti gli account “locked” in Active Directory. Una soluzione semplice ed efficace per l’unlock di gruppo. | USERS |
Con questo abbiamo completato la nostra Guida completa a PowerShell. Un viaggio breve ed intenso che ci ha portato a grattare la superficie di questo potente e vastissimo strumento che è PowerShell. Rimanete sintonizzati, usciranno altre guide su questo filone!
Read related articles
Come imporre restrizioni alle periferiche con un GPO
Abbiamo visto come limitare software (in due modi diversi) e siti web attraverso GPO. Ora è il momento di limitare le
PowerShell: una guida completa – parte 2a
Benvenuti alla parte 2 di 3 di PowerShell: una guida completa. Clicca i seguenti link per consultare la parte 1
PowerShell: una guida completa – parte 1a
Benvenuti alla parte 1 di 3 di Powershell: una guida completa. Clicca i seguenti link per consultare la parte 2