Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
PowerShell è una shell della riga di comando e un linguaggio di scripting usato per l'automazione. Analogamente ad altre shell, ad esempio bash
in Linux o nella shell dei comandi di Windows (cmd.exe
), PowerShell consente di eseguire qualsiasi comando disponibile nel sistema, non solo i comandi di PowerShell.
Tipi di comandi
Per qualsiasi shell in qualsiasi sistema operativo sono disponibili tre tipi di comandi:
parole chiave del linguaggio shell fanno parte del linguaggio di scripting della shell.
- Esempi di parole chiave
bash
includono:if
,then
,else
,elif
efi
. - Esempi di parole chiave
cmd.exe
includono:dir
,copy
,move
,if
eecho
. - Esempi di parole chiave di PowerShell includono:
for
,foreach
,try
,catch
etrap
.
Le parole chiave del linguaggio della shell possono essere usate solo nell'ambiente di runtime della shell. Non esiste alcun file eseguibile, esterno alla shell, che fornisce la funzionalità della parola chiave.
- Esempi di parole chiave
comandi nativi del sistema operativo sono file eseguibili installati nel sistema operativo. I file eseguibili possono essere eseguiti da qualsiasi shell della riga di comando, ad esempio PowerShell. Sono inclusi i file di script che potrebbero richiedere il corretto funzionamento di altre shell. Ad esempio, se si esegue uno script batch di Windows (file
.cmd
) in PowerShell, PowerShell eseguecmd.exe
e passa il file batch per l'esecuzione.comandi specifici dell'ambiente shell sono comandi definiti in file esterni che possono essere usati solo all'interno dell'ambiente di runtime della shell. Questi includono script e funzioni oppure possono essere moduli appositamente compilati che aggiungono comandi al runtime della shell. In PowerShell questi comandi sono noti come cmdlet (pronunciati "command-let").
Esecuzione di comandi nativi
Qualsiasi comando nativo può essere eseguito dalla riga di comando di PowerShell. In genere si esegue il comando esattamente come si farebbe in bash
o cmd.exe
. L'esempio seguente illustra l'esecuzione del comando grep
in bash
in Ubuntu Linux.
sdwheeler@circumflex:~$ grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
sdwheeler@circumflex:~$ pwsh
PowerShell 7.2.6
Copyright (c) Microsoft Corporation.
https://aka.ms/powershell
Type 'help' to get help.
Dopo aver avviato PowerShell in Ubuntu, è possibile eseguire lo stesso comando dalla riga di comando di PowerShell:
PS /home/sdwheeler> grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
Passaggio di argomenti a comandi nativi
La maggior parte delle shell include funzionalità per l'uso di variabili, la valutazione delle espressioni e la gestione delle stringhe. Ma ogni shell esegue queste operazioni in modo diverso. In PowerShell tutti i parametri iniziano con un trattino (-
) carattere. In cmd.exe
la maggior parte dei parametri usa un carattere barra (/
). Altri strumenti da riga di comando potrebbero non avere un carattere speciale per i parametri.
Ogni shell ha il proprio modo di gestire e valutare le stringhe nella riga di comando. Quando si eseguono comandi nativi in PowerShell che prevedono che le stringhe vengano racchiuse tra virgolette in modo specifico, potrebbe essere necessario modificare il modo in cui si passano tali stringhe.
Per altre informazioni, vedere gli articoli seguenti:
PowerShell 7.2 ha introdotto una nuova funzionalità sperimentale PSNativeCommandArgumentPassing
che ha migliorato la gestione dei comandi nativi. Per altre informazioni, vedere $PSNativeCommandArgumentPassing
.
Gestione dell'output e degli errori
PowerShell include anche diversi flussi di output rispetto ad altre shell. Le shell bash
e cmd.exe
hanno stdout e stderr. PowerShell ha sei flussi di output. Per altre informazioni, vedere about_Redirection e about_Output_Streams.
In generale, l'output inviato a stdout da un comando nativo viene inviato al flusso Success in PowerShell. L'output inviato a stderr da un comando nativo, viene inviato al flusso Errore in PowerShell.
Quando un comando nativo ha un codice di uscita diverso da zero, $?
è impostato su $false
. Se il codice di uscita è zero, $?
è impostato su $true
.
Tuttavia, questa modifica è cambiata in PowerShell 7.2. I record di errore reindirizzati dai comandi nativi, ad esempio quando si usano operatori di reindirizzamento (2>&1
), non vengono scritti nella variabile $Error
di PowerShell e la variabile di preferenza $ErrorActionPreference
non influisce sull'output reindirizzato.
Molti comandi nativi scrivono in stderr come flusso alternativo per informazioni aggiuntive. Questo comportamento può causare confusione in PowerShell quando si esaminano errori e le informazioni di output aggiuntive possono andare perse se $ErrorActionPreference
è impostato su uno stato che disattiva l'output.
PowerShell 7.3 ha aggiunto una nuova funzionalità sperimentale PSNativeCommandErrorActionPreference
che consente di controllare se l'output stderr
viene considerato come un errore. Per altre informazioni, vedere $PSNativeCommandUseErrorActionPreference
.
Esecuzione di comandi di PowerShell
Come indicato in precedenza, i comandi di PowerShell sono noti come cmdlet. I cmdlet vengono raccolti nei moduli di PowerShell che possono essere caricati su richiesta. I cmdlet possono essere scritti in qualsiasi linguaggio .NET compilato o usando il linguaggio di scripting di PowerShell stesso.
Comandi di PowerShell che eseguono altri comandi
L'operatore di chiamata di PowerShell (&
) consente di eseguire comandi archiviati in variabili e rappresentati da stringhe o blocchi di script. È possibile usarlo per eseguire qualsiasi comando nativo o comando di PowerShell. Ciò è utile in uno script quando è necessario costruire dinamicamente i parametri della riga di comando per un comando nativo. Per altre informazioni, vedere l'operatore di chiamata .
Il cmdlet Start-Process
può essere usato per eseguire comandi nativi, ma deve essere usato solo quando è necessario controllare la modalità di esecuzione del comando. Il cmdlet include parametri per supportare gli scenari seguenti:
- Eseguire un comando usando credenziali diverse
- Nascondere la finestra della console creata dal nuovo processo
- Reindirizza i flussi stdin, stdout, e stderr di
, e - Usare una directory di lavoro diversa per il comando
Nell'esempio seguente viene eseguito il comando nativo sort.exe
con flussi di input e output reindirizzati.
$processOptions = @{
FilePath = "sort.exe"
RedirectStandardInput = "TestSort.txt"
RedirectStandardOutput = "Sorted.txt"
RedirectStandardError = "SortError.txt"
UseNewEnvironment = $true
}
Start-Process @processOptions
Per altre informazioni, vedere Start-Process.
In Windows il cmdlet Invoke-Item
esegue l'azione predefinita per l'elemento specificato. Ad esempio, esegue un file eseguibile o apre un file di documento usando l'applicazione associata al tipo di file di documento. L'azione predefinita dipende dal tipo di elemento e viene risolto dal provider di PowerShell che fornisce l'accesso all'elemento.
Nell'esempio seguente viene aperto il repository del codice sorgente di PowerShell nel Web browser predefinito.
Invoke-Item https://github.com/PowerShell/PowerShell
Per altre informazioni, vedere Invoke-Item.