Capitolo 1 - Introduzione a PowerShell
Questo capitolo è incentrato sulla ricerca e l'avvio di PowerShell e sulla risoluzione dei punti deboli iniziali che i nuovi utenti riscontrano con PowerShell. Seguire e esaminare gli esempi descritti in questo capitolo sul computer dell'ambiente lab.
Che cos'è PowerShell?
Windows PowerShell è una shell della riga di comando e un ambiente di scripting facili da usare per automatizzare le attività amministrative dei sistemi basati su Windows. Windows PowerShell è preinstallato in tutte le versioni moderne del sistema operativo Windows.
Dove trovare PowerShell
Il modo più semplice per trovare PowerShell in Windows 11 consiste nel digitare PowerShell
nella barra di ricerca, come illustrato nella figura 1-1. Si noti che esistono quattro collegamenti diversi per Windows PowerShell.
Collegamenti a Windows PowerShell in una versione a 64 bit di Windows:
- Windows PowerShell
- Windows PowerShell ISE
- Windows PowerShell (x86)
- Windows PowerShell ISE (x86)
In una versione a 64 bit di Windows si dispone di una versione a 64 bit della console di Windows PowerShell e di Windows PowerShell Integrated Scripting Environment (ISE) e di una versione a 32 bit di ognuno di essi, come indicato dal suffisso (x86) nei collegamenti.
Nota
Windows 11 viene fornito solo come sistema operativo a 64 bit. Non esiste alcuna versione a 32 bit di Windows 11. Windows 11 include tuttavia versioni a 32 bit di Windows PowerShell e Windows PowerShell ISE.
Sono disponibili solo due collegamenti se si esegue una versione a 32 bit precedente di Windows. Questi collegamenti non hanno il suffisso (x86), ma sono versioni a 32 bit.
È consigliabile usare la versione a 64 bit di Windows PowerShell se si esegue un sistema operativo a 64 bit, a meno che non si disponga di un motivo specifico per l'uso della versione a 32 bit.
A seconda della versione di Windows 11 in esecuzione, Windows PowerShell potrebbe essere aperto in Terminale Windows.
Microsoft non aggiorna più PowerShell ISE. L'ISE funziona solo con Windows PowerShell 5.1. Visual Studio Code (VS Code) con l'estensione PowerShell funziona con entrambe le versioni di PowerShell. Vs Code e l'estensione PowerShell non vengono forniti in Windows. Installare VS Code e l'estensione nel computer in cui si creano script di PowerShell. Non è necessario installarli in tutti i computer in cui si esegue PowerShell.
Come avviare PowerShell
Si usano tre diversi account utente di Active Directory negli ambienti di produzione supportati. Ho rispecchiato questi account nell'ambiente lab usato in questo libro. Accedere al computer Windows 11 come utente di dominio senza diritti di amministratore locale o di dominio.
Avviare la console di PowerShell facendo clic sul collegamento a Windows PowerShell , come illustrato nella figura 1-1. Si noti che la barra del titolo della console indica Windows PowerShell, come illustrato nella figura 1-2.
Alcuni comandi vengono eseguiti correttamente quando si esegue PowerShell come utente normale. Tuttavia, PowerShell non partecipa a User Controllo di accesso (UAC). Di conseguenza, non può richiedere l'elevazione per le attività che richiedono l'approvazione di un amministratore.
Nota
Controllo dell'account utente è una funzionalità di sicurezza di Windows che consente di impedire l'esecuzione di codice dannoso con privilegi elevati.
Quando si esegue l'accesso come utente comune, PowerShell restituisce un errore quando si esegue un comando che richiede l'elevazione dei privilegi. Ad esempio, arrestare un servizio Windows:
Stop-Service -Name W32Time
Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to
the following error: Cannot open W32Time service on computer '.'.
At line:1 char:1
+ Stop-Service -Name W32Time
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (System.ServiceProcess.ServiceCon
troller:ServiceController) [Stop-Service], ServiceCommandException
+ FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Comm
ands.StopServiceCommand
La soluzione consiste nell'eseguire PowerShell con privilegi elevati come utente amministratore locale. Ecco come ho configurato il mio secondo account utente di dominio. Seguendo il principio dei privilegi minimi, questo account non deve essere un amministratore di dominio o avere privilegi elevati nel dominio.
Per avviare PowerShell con diritti elevati, fare clic con il pulsante destro del mouse sul collegamento a Windows PowerShell e selezionare Esegui come amministratore, come illustrato nella figura 1-3.
Windows richiede le credenziali perché è stato eseguito l'accesso a Windows come utente ordinario. Immettere le credenziali dell'utente di dominio che è un amministratore locale, come illustrato nella figura 1-4.
Si noti che la barra del titolo delle finestre della console con privilegi elevati indica Amministratore: Windows PowerShell, come illustrato nella figura 1-5.
Ora che si esegue PowerShell con privilegi elevati come amministratore, controllo dell'account utente non è più un problema quando si esegue un comando che richiede l'elevazione dei privilegi.
Importante
È consigliabile eseguire PowerShell con privilegi elevati solo quando è assolutamente necessario.
Quando si fa riferimento a computer remoti, non è necessario eseguire PowerShell con privilegi elevati. L'esecuzione di PowerShell con privilegi elevati influisce solo sui comandi eseguiti nel computer locale.
È possibile semplificare la ricerca e l'avvio di PowerShell. Aggiungere il collegamento a PowerShell o Terminale Windows alla barra delle applicazioni. Cercare di nuovo PowerShell, tranne questa volta fare clic con il pulsante destro del mouse su di esso e selezionare Aggiungi alla barra delle applicazioni , come illustrato nella figura 1-6.
Importante
La versione originale di questo libro, pubblicata nel 2017, consiglia di aggiungere un collegamento alla barra delle applicazioni per avviare automaticamente un'istanza con privilegi elevati ogni volta che si avvia PowerShell. Tuttavia, a causa di potenziali problemi di sicurezza, non lo consiglio più. Tutte le applicazioni avviate da un'istanza con privilegi elevati di PowerShell ignorano anche controllo dell'account utente ed eseguono con privilegi elevati. Ad esempio, se si avvia un Web browser da un'istanza con privilegi elevati di PowerShell, qualsiasi sito Web visitato contenente codice dannoso viene eseguito anche con privilegi elevati.
Quando è necessario eseguire PowerShell con autorizzazioni elevate, fare clic con il pulsante destro del mouse sul collegamento di PowerShell aggiunto alla barra delle applicazioni premendo MAIUSC. Selezionare Esegui come amministratore, come illustrato nella figura 1-7.
Determinare la versione di PowerShell
In PowerShell sono presenti variabili automatiche che archiviano le informazioni sullo stato. Una di queste variabili è $PSVersionTable
, che contiene informazioni sulla versione relative alla sessione di PowerShell.
$PSVersionTable
Name Value
---- -----
PSVersion 5.1.22621.2428
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.22621.2428
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
Se si esegue una versione di Windows PowerShell precedente alla 5.1, è consigliabile aggiornare la versione di Windows. Windows PowerShell 5.1 è preinstallato nelle versioni attualmente supportate di Windows.
PowerShell versione 7 non sostituisce Windows PowerShell 5.1; viene installato side-by-side con Windows PowerShell. Windows PowerShell versione 5.1 e PowerShell versione 7 sono due prodotti diversi. Per altre informazioni sulle differenze tra Windows PowerShell versione 5.1 e PowerShell versione 7, vedere Migrazione da Windows PowerShell 5.1 a PowerShell 7.
Suggerimento
PowerShell versione 6, in precedenza nota come PowerShell Core, non è più supportato.
Criterio di esecuzione
I criteri di esecuzione di PowerShell controllano le condizioni in cui è possibile eseguire script di PowerShell. I criteri di esecuzione in PowerShell sono una funzionalità di sicurezza progettata per impedire l'esecuzione involontaria di script dannosi. Tuttavia, non è un limite di sicurezza perché non può impedire agli utenti determinati di eseguire deliberatamente script. Un utente determinato può ignorare i criteri di esecuzione in PowerShell.
È possibile impostare criteri di esecuzione per il computer locale, l'utente corrente o una sessione di PowerShell. È anche possibile impostare criteri di esecuzione per utenti e computer con Criteri di gruppo.
La tabella seguente illustra i criteri di esecuzione predefiniti per i sistemi operativi Windows correnti.
Versione del sistema operativo Windows | Criteri di esecuzione predefiniti |
---|---|
Windows Server 2022 | Con firma remota |
Windows Server 2019 | Con firma remota |
Windows Server 2016 | Con firma remota |
Windows 11 | Limitata |
Windows 10 | Limitata |
Indipendentemente dall'impostazione dei criteri di esecuzione, è possibile eseguire in modo interattivo qualsiasi comando di PowerShell. I criteri di esecuzione interessano solo i comandi in esecuzione in uno script. Usare il Get-ExecutionPolicy
cmdlet per determinare l'impostazione corrente dei criteri di esecuzione.
Controllare l'impostazione dei criteri di esecuzione nel computer.
Get-ExecutionPolicy
Restricted
Elencare le impostazioni dei criteri di esecuzione per tutti gli ambiti.
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
Tutti i sistemi operativi client Windows hanno l'impostazione predefinita dei criteri di esecuzione di Restricted
. Non è possibile eseguire script di PowerShell usando l'impostazione dei Restricted
criteri di esecuzione. Per testare i criteri di esecuzione, salvare il codice seguente come .ps1
file denominato Get-TimeService.ps1
.
Suggerimento
Uno script di PowerShell è un file di testo non crittografato che contiene i comandi da eseguire. I file di script di PowerShell usano l'estensione di .ps1
file. Per creare uno script di PowerShell, usare un editor di codice come Visual Studio Code (VS Code) o qualsiasi editor di testo, ad esempio Blocco note.
Quando si esegue il comando seguente in modo interattivo, viene completato senza errori.
Get-Service -Name W32Time
Tuttavia, PowerShell restituisce un errore quando si esegue lo stesso comando da uno script.
.\Get-TimeService.ps1
.\Get-TimeService.ps1 : File C:\tmp\Get-TimeService.ps1 cannot be loaded
because running scripts is disabled on this system. For more information,
see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Get-TimeService.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
Quando si esegue un comando in PowerShell che genera un errore, leggere il messaggio di errore prima di ripetere il comando. Si noti che il messaggio di errore indica perché il comando non è riuscito:
... Gli script in esecuzione sono disabilitati in questo sistema.
Per abilitare l'esecuzione degli script, modificare i criteri di esecuzione con il Set-ExecutionPolicy
cmdlet . LocalMachine
è l'ambito predefinito quando non si specifica il parametro Scope . È necessario eseguire PowerShell con privilegi elevati come amministratore per modificare i criteri di esecuzione per il computer locale.
A meno che non si firmino gli script, è consigliabile usare i RemoteSigned
criteri di esecuzione.
RemoteSigned
impedisce l'esecuzione di script scaricati che non sono firmati da un autore attendibile.
Prima di modificare i criteri di esecuzione, leggere l'articolo della Guida about_Execution_Policies per comprendere le implicazioni per la sicurezza.
Modificare l'impostazione dei criteri di esecuzione nel computer in RemoteSigned
.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Se il criterio di esecuzione è stato modificato correttamente, PowerShell visualizza l'avviso seguente:
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust.
Changing the execution policy might expose you to the security risks
described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the
execution policy?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "N"):y
Se PowerShell non è in esecuzione con privilegi elevati come amministratore, PowerShell restituisce il messaggio di errore seguente:
Set-ExecutionPolicy : Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWAR
E\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied. To
change the execution policy for the default (LocalMachine) scope, start
Windows PowerShell with the "Run as administrator" option. To change the
execution policy for the current user, run "Set-ExecutionPolicy -Scope
CurrentUser".
At line:1 char:1
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy],
UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.
PowerShell.Commands.SetExecutionPolicyCommand
È anche possibile modificare i criteri di esecuzione per l'utente corrente senza che sia necessario eseguire PowerShell con privilegi elevati come amministratore. Questo passaggio non è necessario se è stato impostato correttamente il criterio di esecuzione per il computer locale su RemoteSigned
.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Con i criteri di esecuzione impostati su RemoteSigned
, lo Get-TimeService.ps1
script viene eseguito correttamente.
.\Get-TimeService.ps1
Status Name DisplayName
------ ---- -----------
Running W32Time Windows Time
Riepilogo
In questo capitolo si è appreso dove trovare e come avviare PowerShell. Si è anche appreso come determinare la versione di PowerShell e lo scopo dei criteri di esecuzione.
Revisione
- Come è possibile determinare quale versione di PowerShell è in esecuzione in un computer?
- Quando avviare PowerShell con privilegi elevati come amministratore?
- Quali sono i criteri di esecuzione predefiniti nei computer client Windows e cosa impedisce di eseguire?
- Come si determina l'impostazione corrente dei criteri di esecuzione di PowerShell?
- Come è possibile modificare i criteri di esecuzione di PowerShell?
Riferimenti
Per altre informazioni sui concetti trattati in questo capitolo, vedere gli articoli della Guida di PowerShell seguenti.
Passaggi successivi
Nel capitolo successivo verranno fornite informazioni sull'individuabilità dei comandi in PowerShell. Si apprenderà anche come scaricare i file della Guida di PowerShell per visualizzare la Guida nella sessione di PowerShell.