about_PowerShell_exe
Descrizione breve
Viene illustrato come usare l'interfaccia della powershell.exe
riga di comando. Visualizza i parametri della riga di comando e descrive la sintassi.
Descrizione lunga
Per informazioni sulle opzioni della riga di comando per PowerShell 7, vedere about_Pwsh.
SYNTAX
PowerShell[.exe]
[-PSConsoleFile <file> | -Version <version>]
[-NoLogo]
[-NoExit]
[-Sta]
[-Mta]
[-NoProfile]
[-NonInteractive]
[-InputFormat {Text | XML}]
[-OutputFormat {Text | XML}]
[-WindowStyle <style>]
[-EncodedArguments <Base64EncodedArguments>]
[-EncodedCommand <Base64EncodedCommand>]
[-ConfigurationName <string>]
[-File - | <filePath> <args>]
[-ExecutionPolicy <ExecutionPolicy>]
[-Command - | { <script-block> [-args <arg-array>] }
| { <string> [<CommandParameters>] } ]
PowerShell[.exe] -Help | -? | /?
Parametri
Tutti i parametri non fanno distinzione tra maiuscole e minuscole.
-File - | <filePath><argomenti>
Il valore di File può essere -
o un percorso file e parametri facoltativi. Se il valore di File è -
, i comandi vengono letti dall'input standard.
Se il valore di File è un percorso file, lo script viene eseguito nell'ambito locale ("dot-sourced") della nuova sessione, in modo che le funzioni e le variabili create dallo script siano disponibili in tale nuova sessione. Immettere il percorso file script e tutti i parametri. Il file deve essere l'ultimo parametro nel comando . Tutti i valori digitati dopo il parametro File vengono interpretati come il percorso file di script e i parametri passati a tale script. Ad esempio: -File .\Get-Script.ps1 -Domain Central
In genere, i parametri opzionali di uno script sono inclusi o omessi.
Ad esempio, il comando seguente usa il parametro All del Get-Script.ps1
file di script: -File .\Get-Script.ps1 -All
In rari casi, potrebbe essere necessario specificare un valore booleano per un parametro.
Non è possibile passare un valore booleano esplicito per un parametro switch quando si esegue uno script in questo modo. Questa limitazione è stata rimossa in PowerShell 6 (pwsh.exe
).
I parametri passati allo script vengono passati come stringhe letterali, dopo l'interpretazione da parte della shell corrente. Ad esempio, se ci si trova e si cmd.exe
vuole passare un valore di variabile di ambiente, usare la cmd.exe
sintassi: powershell.exe -File .\test.ps1 -TestParam %windir%
Al contrario, l'esecuzione powershell.exe -File .\test.ps1 -TestParam $env:windir
in cmd.exe
genera lo script che riceve la stringa $env:windir
letterale perché non ha un significato speciale per la shell corrente cmd.exe
. Lo $env:windir
stile di riferimento alla variabile di ambiente può essere usato all'interno di un parametro Command , perché viene interpretato come codice di PowerShell.
Analogamente, se si vuole eseguire lo stesso comando da uno script Batch, è consigliabile usare %~dp0
anziché o $PSScriptRoot
per rappresentare la directory di .\
esecuzione corrente: pwsh -File %~dp0test.ps1 -TestParam %windir%
. Se invece si usa .\test.ps1
PowerShell genera un errore perché non riesce a trovare il percorso letterale .\test.ps1
Nota
Il parametro File non può supportare gli script usando un parametro che prevede una matrice di valori di argomento. Questo, purtroppo, è una limitazione del modo in cui un comando nativo ottiene i valori degli argomenti. Quando si chiama un eseguibile nativo ,ad esempio powershell
o pwsh
, non sa cosa fare con una matrice, quindi viene passato come stringa.
Se il valore di File è -
, i comandi vengono letti dall'input standard.
L'esecuzione powershell -File -
senza input standard reindirizzato avvia una normale sessione. Equivale a non specificare affatto il File
parametro . Quando si legge dall'input standard, le istruzioni di input vengono eseguite un'istruzione alla volta come se fossero state digitate al prompt dei comandi di PowerShell. Se un'istruzione non analizza correttamente, l'istruzione non viene eseguita. Il codice di uscita del processo è determinato dallo stato dell'ultimo comando (eseguito). Con l'esecuzione corretta, il codice di uscita è sempre 0
. Quando il file di script termina con un exit
comando, il codice di uscita del processo viene impostato sull'argomento numerico usato con il exit
comando .
Analogamente a -Command
, quando si verifica un errore di terminazione dello script, il codice di uscita viene impostato su 1
. Tuttavia, a differenza di -Command
, quando l'esecuzione viene interrotta con CTRL+C, il codice di uscita è .0
Per altre informazioni, vedere $LASTEXITCODE
in about_Automatic_Variables.
-Command
Il valore di Command può essere -
, un blocco di script o una stringa. Se il valore di Command è -
, il testo del comando viene letto dall'input standard.
Il parametro Command accetta solo un blocco di script per l'esecuzione quando è in grado di riconoscere il valore passato a Command come tipo ScriptBlock . Ciò è possibile solo quando si esegue powershell.exe
da un altro host di PowerShell. Il tipo ScriptBlock può essere contenuto in una variabile esistente, restituita da un'espressione o analizzata dall'host di PowerShell come blocco di script letterale racchiuso tra parentesi graffe ({}
), prima di essere passato a powershell.exe
.
powershell -Command {Get-WinEvent -LogName security}
In cmd.exe
non esiste un blocco di script (o un tipo ScriptBlock ), quindi il valore passato a Command è sempre una stringa. È possibile scrivere un blocco di script all'interno della stringa, ma invece di eseguirlo si comporta esattamente come se fosse stato digitato in un tipico prompt di PowerShell, stampando il contenuto del blocco di script all'utente.
Una stringa passata al comando viene comunque eseguita come codice di PowerShell, pertanto le parentesi graffe del blocco di script non sono spesso necessarie al primo posto quando si esegue da cmd.exe
. Per eseguire un blocco di script inline definito all'interno di una stringa, è possibile usare l'operatore &
di chiamata:
powershell.exe -Command "& {Get-WinEvent -LogName security}"
Se il valore di Command è una stringa, Command deve essere l'ultimo parametro per pwsh, perché tutti gli argomenti che seguono vengono interpretati come parte del comando da eseguire.
Quando viene chiamato dall'interno di una sessione di PowerShell esistente, i risultati vengono restituiti alla shell padre come oggetti XML deserializzati, non oggetti attivi. Per altre shell, i risultati vengono restituiti come stringhe.
Se il valore di Command è -
, i comandi vengono letti dall'input standard. È necessario reindirizzare l'input standard quando si usa il parametro Command con input standard. Ad esempio:
@'
"in"
"hi" |
% { "$_ there" }
"out"
'@ | powershell -NoProfile -Command -
Nell'esempio viene prodotto l'output seguente:
in
hi there
out
Durante la lettura dall'input standard, l'input viene analizzato ed eseguito un'istruzione alla volta, come se fossero stati digitati al prompt dei comandi di PowerShell. Se il codice di input non viene analizzato correttamente, l'istruzione non viene eseguita. A meno che non si usi il -NoExit
parametro , la sessione di PowerShell viene chiusa quando non è disponibile alcun input da leggere dall'input standard.
Il codice di uscita del processo è determinato dallo stato dell'ultimo comando (eseguito) all'interno dell'input. Il codice di uscita è quando $?
è 0
$true
o 1
quando $?
è $false
. Se l'ultimo comando è un programma esterno o uno script di PowerShell che imposta in modo esplicito un codice di uscita diverso da 0
o 1
, tale codice di uscita viene convertito in 1
per il codice di uscita del processo. Analogamente, il valore 1 viene restituito quando si verifica un errore di terminazione dello script (terminazione dello spazio di esecuzione), ad esempio o throw
-ErrorAction Stop
, o quando l'esecuzione viene interrotta con CTRL+C.
Per mantenere il codice di uscita specifico, aggiungere exit $LASTEXITCODE
alla stringa di comando o al blocco di script. Per altre informazioni, vedere $LASTEXITCODE
in about_Automatic_Variables.
-ConfigurationName <string>
Specifica un endpoint di configurazione in cui viene eseguito PowerShell. Può trattarsi di qualsiasi endpoint registrato nel computer locale, inclusi gli endpoint remoti predefiniti di PowerShell o un endpoint personalizzato con funzionalità specifiche del ruolo utente.
-EncodedArguments Base64EncodedArguments <>
Accetta argomenti di comando della versione stringa con codifica Base64. Usare questo parametro per inviare argomenti che richiedono virgolette complesse annidate. La rappresentazione Base64 deve essere una stringa con codifica UTF-16LE.
-EncodedCommand <Base64EncodedCommand>
Accetta una versione di un comando di tipo stringa codificata in base 64. Usare questo parametro per inviare a PowerShell comandi che richiedono virgolette complesse o parentesi graffe. La stringa deve essere formattata usando la codifica dei caratteri UTF-16LE.
-ExecutionPolicy ExecutionPolicy <>
Imposta i criteri di esecuzione predefiniti per la sessione corrente e lo salva nella $env:PSExecutionPolicyPreference
variabile di ambiente. Questo parametro non modifica i criteri di esecuzione di PowerShell impostati nel Registro di sistema. Per informazioni sui criteri di esecuzione di PowerShell, incluso un elenco di valori validi, vedere about_Execution_Policies.
-InputFormat {Text | XML}
Descrive il formato dei dati inviati a PowerShell. I valori validi sono Text
(stringhe di testo) o XML
(formato CLIXML serializzato).
-Mta
Avvia PowerShell usando un apartment a thread multipli. Questo parametro è stato introdotto in PowerShell 3.0. In PowerShell 2.0 l'impostazione predefinita è apartment a thread multipli (MTA). In PowerShell 3.0 l'impostazione predefinita è apartment a thread singolo (STA).
-NoExit
Non viene chiuso dopo l'esecuzione dei comandi di avvio.
-NonInteractive
Questa opzione viene usata per creare sessioni che non devono richiedere l'input dell'utente. Ciò è utile per gli script eseguiti nelle attività pianificate o nelle pipeline CI/CD. Qualsiasi tentativo di usare funzionalità interattive, ad esempio Read-Host
o richieste di conferma, comporta errori di terminazione dell'istruzione anziché sporsi.
-NoLogo
Nasconde le informazioni sul copyright all'avvio.
-NoProfile
Non carica il profilo di PowerShell.
-OutputFormat {Text | XML}
Determina la formattazione dell'output di PowerShell. I valori validi sono Text
(stringhe di testo) o XML
(formato CLIXML serializzato).
-PSConsoleFile <FilePath>
Carica il file della console di PowerShell specificato. Immettere il percorso e il nome del file della console. Per creare un file di console, usare il cmdlet Export-Console in PowerShell.
-Sta
Avvia PowerShell usando un apartment a thread singolo. In Windows PowerShell 2.0 l'impostazione predefinita è apartment a thread multipli (MTA). In Windows PowerShell 3.0 l'impostazione predefinita è apartment a thread singolo (STA).
-Version PowerShell Version <>
Avvia la versione specificata di PowerShell. I valori validi sono 2.0 e 3.0. La versione specificata deve essere installata nel sistema. Se Windows PowerShell 3.0 è installato nel computer, "3.0" è la versione predefinita. In caso contrario, "2.0" è la versione predefinita. Per ulteriori informazioni, vedi Installare PowerShell.
-Stile finestra Stile <finestra>
Imposta lo stile della finestra per la sessione. I valori validi sono Normal
, Minimized
, Maximized
e Hidden
.
-Help, -?, /?
Visualizza la Guida per PowerShell.exe
. Se si digita un PowerShell.exe
comando in una sessione di PowerShell, anteporre i parametri del comando con un trattino (-
), non una barra (/
). È possibile usare un trattino o una barra in cmd.exe
.
REMARKS
Nota sulla risoluzione dei problemi: in PowerShell 2.0, l'avvio di alcuni programmi dalla console di PowerShell ha esito negativo con lastExitCode di 0xc0000142.
ESEMPI
# Create a new PowerShell session and load a saved console file
PowerShell -PSConsoleFile sqlsnapin.psc1
# Create a new PowerShell V2 session with text input, XML output, and no logo
PowerShell -Version 2.0 -NoLogo -InputFormat text -OutputFormat XML
# Execute a PowerShell Command in a session
PowerShell -Command "Get-EventLog -LogName security"
# Run a script block in a session
PowerShell -Command {Get-EventLog -LogName security}
# An alternate way to run a command in a new session
PowerShell -Command "& {Get-EventLog -LogName security}"
# To use the -EncodedCommand parameter:
$command = "dir 'c:\program files' "
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand