Capitolo 1 - Introduzione a PowerShell

Ho notato che, nella maggior parte dei casi, i relatori di meeting e conferenze hanno già PowerShell installato quando avviano presentazioni introduttive. Questo libro inizia rispondendo alle domande che ho sentito chiedere dai partecipanti che non avevano alcuna esperienza con PowerShell.

In particolare, questo capitolo illustra come trovare e avviare PowerShell e su come risolvere alcune delle difficoltà iniziali che i nuovi utenti riscontrano con PowerShell. Assicurarsi di seguire in modo scrupoloso gli esempi presentati in questo capitolo sul computer Windows 10 dell'ambiente lab.

Prerequisiti per iniziare a usare PowerShell

Tutte le versioni moderne dei sistemi operativi Windows vengono fornite con PowerShell pre-installato. Se si esegue una versione precedente a 5.1, è necessario installare la versione più recente.

Dove è possibile trovare PowerShell?

Il modo più semplice per trovare PowerShell in Windows 10 è quello di digitare PowerShell nella barra di ricerca, come illustrato nella figura 1-1.

Figura 1-1 - Cercare PowerShell nel menu Start

Nella figura 1-1 sono illustrati quattro diversi collegamenti per PowerShell. Il computer usato a scopo dimostrativo in questo libro esegue la versione a 64 bit di Windows 10 e, di conseguenza, è disponibile sia una versione a 64 bit della console di PowerShell e di PowerShell ISE (Integrated Scripting Environment) sia una versione a 32 bit di entrambi i componenti, come indicato dal suffisso (x86) sui collegamenti. Se si esegue una versione di Windows 10 a 32 bit, saranno disponibili solo due collegamenti, che non hanno il suffisso (x86), ma costituiscono comunque versioni a 32 bit. Se si ha un sistema operativo a 64 bit, è consigliabile eseguire la versione a 64 bit di PowerShell, a meno che non esista un motivo specifico per eseguire la versione a 32 bit.

Per informazioni sull'avvio di PowerShell in altre versioni Windows, vedere Avvio di Windows PowerShell.

Come deve essere avviato PowerShell?

Negli ambienti aziendali di produzione supportati, uso tre diversi account utente di Active Directory. Ho eseguito il mirroring di questi account nell'ambiente lab usato in questo libro. Ho eseguito l'accesso al computer Windows 10 come utente di dominio ma non come amministratore di dominio o locale.

Ho quindi avviato la console di PowerShell facendo clic sul collegamento "Windows PowerShell", come illustrato nella figura 1-1.

Figura 1-4 - Barra del titolo della finestra di PowerShell

Nella barra del titolo della console di PowerShell è riportato "Windows PowerShell", come illustrato nella figura 1-4. Alcuni comandi vengono eseguiti correttamente, ma PowerShell non può usare la funzionalità Controllo di accesso utente. Di conseguenza, non può richiedere l'elevazione per le attività che richiedono l'approvazione di un amministratore. Viene generato il messaggio di errore seguente:

Get-Service -Name W32Time | Stop-Service
Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to the following
error: Cannot open W32Time service on computer '.'.
At line:1 char:29
+ Get-Service -Name W32Time | Stop-Service
+
    + CategoryInfo          : CloseError: (System.ServiceProcess.ServiceController:ServiceController)
     [Stop-Service], ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Commands.StopServiceCommand

Per risolvere questo problema, è possibile eseguire PowerShell come utente di dominio e amministratore locale. Ho configurato il mio secondo account utente di dominio proprio in questo modo. Usando il principio dei privilegi minimi, questo account non deve essere un amministratore di dominio o disporre di privilegi elevati nel dominio.

Chiudere PowerShell. Riavviare la console di PowerShell (tranne in questo caso) facendo clic con il pulsante destro del mouse sul collegamento Windows PowerShell e selezionare Esegui come amministratore, come illustrato nella figura 1-5.

Figura 1-5 - Menu di scelta rapida - Esegui come amministratore

Se è stato eseguito l'accesso a Windows come utente normale, verranno richieste le credenziali. In questo caso, inserirò le credenziali per l'account utente che ho configurato come utente di dominio e amministratore locale, come illustrato nella figura 1-6.

Figura 1-6

Dopo il riavvio di PowerShell come amministratore, la barra del titolo deve indicare "Amministrazione istrator: Windows PowerShell", come illustrato nella figura 1-7.

Figura 1-7

Avendo avviato PowerShell con privilegi elevati come amministratore locale, la funzionalità Controllo di accesso utente non costituirà più un problema se nel computer locale eseguirò un comando che prevedrebbe in genere una richiesta di elevazione. Tenere presente, tuttavia, che qualsiasi comando eseguito da questa istanza della console di PowerShell con privilegi elevati verrà eseguito analogamente con privilegi elevati.

Per semplificare la ricerca di PowerShell e il successivo avvio come amministratore, è consigliabile aggiungerlo alla barra delle applicazioni e impostarlo in modo che venga avviato automaticamente come amministratore ogni volta che viene eseguito.

Cercare di nuovo PowerShell (tranne in questo caso) facendo clic con il pulsante destro del mouse sulla voce corrispondente e selezionare "Aggiungi alla barra delle applicazioni", come illustrato nella figura 1-8.

Figura 1-8

Fare clic con il pulsante destro del mouse sul collegamento di PowerShell, che ora è stato aggiunto alla barra delle applicazioni, e selezionare Proprietà, come illustrato nella figura 1-9.

Figura 1-9 - Controllo dell'account utente - immissione delle credenziali

Fare clic su "Avanzate" (numero 1 nella figura 1-10), selezionare la casella di controllo "Esegui come amministratore" (numero 2 nella figura 1-10) e quindi fare clic su OK due volte per accettare le modifiche e uscire da entrambe le finestre di dialogo.

Figura 1-10 - Barra del titolo che mostra

In questo modo, non sarà più necessario preoccuparsi di trovare PowerShell o di accertarsi che venga eseguito come amministratore.

L'esecuzione di PowerShell con privilegi elevati come amministratore per evitare problemi con la funzionalità Controllo di accesso utente influisce solo sui comandi eseguiti sul computer locale. Non ha invece alcun impatto sui comandi destinati a computer remoti.

Quale versione di PowerShell è in esecuzione?

In PowerShell sono disponibili diverse variabili automatiche in cui sono contenute informazioni sullo stato. Una di queste è $PSVersionTable, contenente una tabella hash che può essere usata per visualizzare informazioni relative alla versione di PowerShell:

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.19041.1
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.1
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Le versioni più recenti di Windows PowerShell vengono distribuite come parte di Windows Management Framework (WMF). A seconda della versione di WMF, è necessaria una versione specifica di .NET Framework. Per eseguire l'aggiornamento a Windows PowerShell 5.1, vedere Aggiornamento di Windows PowerShell esistente.

Criteri di esecuzione

Contrariamente a quanto si pensa, i criteri di esecuzione in PowerShell non costituiscono un limite di sicurezza, ma sono stati ideati per impedire a un utente di eseguire inconsapevolmente uno script. Chiunque può facilmente aggirare i criteri di esecuzione in PowerShell. La tabella 1-2 mostra i criteri di esecuzione predefiniti per i sistemi operativi Windows correnti.

Versione del sistema operativo Windows Criteri di esecuzione predefiniti
Server 2019 Con firma remota
Server 2016 Con firma remota
Windows 10 Limitata

Indipendentemente dell'impostazione dei criteri di esecuzione, qualsiasi comando di PowerShell può essere eseguito in modo interattivo. I criteri di esecuzione interessano solo i comandi in esecuzione in uno script. Il cmdlet Get-ExecutionPolicy consente di identificare l'impostazione corrente dei criteri di esecuzione, mentre il cmdlet Set-ExecutionPolicy consente di modificare i criteri di esecuzione. Si consiglia di usare i criteri Con firma remota poiché prevedono che, per poter essere eseguiti, gli script scaricati siano stati firmati da un autore attendibile.

Verificare i criteri di esecuzione correnti:

Get-ExecutionPolicy
Restricted

Se i criteri di esecuzione sono impostati su Con restrizioni, gli script di PowerShell non possono essere eseguiti in nessun caso. Questa è l'impostazione predefinita in tutti i sistemi operativi client Windows. Per capire meglio il problema, salvare il codice seguente come file .ps1 denominato Stop-TimeService.ps1.

Suggerimento

Uno script di PowerShell è un file di testo non crittografato con un'estensione .ps1 che contiene i comandi da eseguire. 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.

Get-Service -Name W32Time | Stop-Service -PassThru

Il comando viene eseguito in modo interattivo senza errori, purché PowerShell venga eseguito con privilegi elevati come amministratore. Non appena viene salvato come file di script e si tenta di eseguire lo script, tuttavia, viene generato un errore:

.\Stop-TimeService.ps1
.\Stop-TimeService.ps1 : File C:\demo\Stop-TimeService.ps1 cannot be loaded because
running scripts is disabled on this system. For more information, see
about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Stop-TimeService.ps1
+
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

L'errore visualizzato nel set di risultati precedente indica esattamente il problema (nel sistema è disabilitata l'esecuzione degli script). Quando si esegue un comando in PowerShell che genera un messaggio di errore, assicurarsi di leggere il messaggio anziché limitarsi a eseguire di nuovo il comando sperando che venga eseguito correttamente.

Modificare i criteri di esecuzione di PowerShell in "Con firma remota".

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
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 http://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

Assicurarsi di leggere l'avviso visualizzato quando si modificano i criteri di esecuzione. Si consiglia inoltre di consultare l'argomento della Guida about_Execution_Policies per capire meglio le implicazioni di sicurezza correlate alla modifica dei criteri di esecuzione.

Dopo aver impostato i criteri di esecuzione su Con firma remota, lo script Stop-TimeService.ps1 viene eseguito senza errori.

.\Stop-TimeService.ps1
Status   Name               DisplayName
------   ----               -----------
Stopped  W32Time            Windows Time

Assicurarsi di avviare il servizio Ora di Windows prima di continuare; in caso contrario, potrebbero verificarsi problemi imprevisti.

Start-Service -Name w32time

Riepilogo

In questo capitolo si è appreso come trovare e avviare PowerShell e come creare un collegamento che consenta di avviare PowerShell come amministratore. Sono state inoltre fornite informazioni sui criteri di esecuzione predefiniti e su come modificarli.

Revisione

  1. Come è possibile determinare quale versione di PowerShell è in esecuzione in un computer?
  2. Perché è importante avviare PowerShell con privilegi elevati come amministratore?
  3. Come è possibile determinare i criteri di esecuzione di PowerShell correnti?
  4. Cosa impediscono che si verifichi i criteri di esecuzione predefiniti di PowerShell nei computer client Windows?
  5. Come è possibile modificare i criteri di esecuzione di PowerShell?

Per altre informazioni sugli argomenti trattati in questo capitolo, consiglio di leggere gli argomenti seguenti della Guida di PowerShell.

Nel capitolo successivo verranno fornite informazioni sull'individuabilità dei comandi in PowerShell. Verranno inoltre fornite indicazioni su come aggiornare PowerShell in modo gli argomenti della Guida possano essere visualizzati direttamente in PowerShell anziché in un browser Internet.