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

-Command

Esegue i comandi specificati (e tutti i parametri) come se fossero stati digitati al prompt dei comandi di PowerShell e quindi esce, a meno che non venga specificato il NoExit parametro .

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.exenon esiste un blocco di script (o un tipo ScriptBlock ), quindi il valore passato a Command sarà sempre una stringa. È possibile scrivere un blocco di script all'interno della stringa, ma anziché essere eseguito, si comporterà esattamente come se fosse stato digitato a un prompt tipico di PowerShell, ovvero verrà stampato il contenuto del blocco di script.

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 è -, il testo del comando viene letto 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

Il codice di uscita del processo è determinato dallo stato dell'ultimo comando (eseguito) all'interno del blocco di script. 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. 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.

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.

-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.

-File - | <Filepath><Args>

Se il valore di File è -, il testo del comando viene letto dall'input standard. L'esecuzione powershell -File - senza input standard reindirizzato avvia una normale sessione. Equivale a non specificare affatto il parametro File .

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. 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.

I parametri passati allo script vengono passati come stringhe letterali, dopo l'interpretazione da parte della shell corrente. Ad esempio, se ci si trova in cmd.exe e si vuole passare un valore di variabile di ambiente, usare la sintassi cmd.exe : powershell.exe -File .\test.ps1 -TestParam %windir%

Al contrario, l'esecuzione powershell.exe -File .\test.ps1 -TestParam $env:windir in cmd.exe comporta che lo script riceva la stringa $env:windir letterale perché non ha un significato speciale per la shell cmd.exe corrente. Lo $env:windir stile di riferimento alla variabile di ambiente può essere usato all'interno di un parametro Command , perché verrà 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: powershell.exe -File %~dp0test.ps1 -TestParam %windir%. Se invece è stato usato .\test.ps1, PowerShell genera un errore perché non riesce a trovare il percorso letterale .\test.ps1

Quando il valore di File è un percorso file, Filedeve essere l'ultimo parametro nel comando perché tutti i caratteri digitati dopo il nome del parametro File vengono interpretati come il percorso file script seguito dai parametri dello script.

È possibile includere i parametri e i valori dello script nel valore del parametro File . 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).

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.

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 . Con la terminazione normale, il codice di uscita è sempre 0.

Per altre informazioni, vedere $LASTEXITCODE in about_Automatic_Variables.

-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.

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