Start-Process
Avvia uno o più processi nel computer locale.
Sintassi
Default (Impostazione predefinita)
Start-Process
[-FilePath] <String>
[[-ArgumentList] <String[]>]
[-Credential <PSCredential>]
[-WorkingDirectory <String>]
[-LoadUserProfile]
[-NoNewWindow]
[-PassThru]
[-RedirectStandardError <String>]
[-RedirectStandardInput <String>]
[-RedirectStandardOutput <String>]
[-WindowStyle <ProcessWindowStyle>]
[-Wait]
[-UseNewEnvironment]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
UseShellExecute
Start-Process
[-FilePath] <String>
[[-ArgumentList] <String[]>]
[-WorkingDirectory <String>]
[-PassThru]
[-Verb <String>]
[-WindowStyle <ProcessWindowStyle>]
[-Wait]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Descrizione
Il cmdlet Start-Process avvia uno o più processi nel computer locale. Per impostazione predefinita, Start-Process crea un nuovo processo che eredita tutte le variabili di ambiente definite nel processo corrente.
Per specificare il programma da eseguire nel processo, immettere un file eseguibile o un file di script oppure un file che può essere aperto utilizzando un programma nel computer. Se si specifica un file non eseguibile, Start-Process viene avviato il programma associato al file, in modo simile al Invoke-Item cmdlet.
È possibile usare i parametri di Start-Process per specificare opzioni, ad esempio il caricamento di un profilo utente, l'avvio del processo in una nuova finestra o l'uso di credenziali alternative.
Esempio
Esempio 1: Avviare un processo che usa i valori predefiniti
In questo esempio viene avviato un processo che usa il file Sort.exe nella cartella corrente. Il comando utilizza tutti i valori predefiniti, inclusi lo stile della finestra predefinito, la cartella di lavoro e le credenziali.
Start-Process -FilePath "sort.exe"
Esempio 2: Stampare un file di testo
In questo esempio viene avviato un processo che stampa il file C:\PS-Test\MyFile.txt.
Start-Process -FilePath "myfile.txt" -WorkingDirectory "C:\PS-Test" -Verb Print
Esempio 3: Avviare un processo per ordinare gli elementi in un nuovo file
In questo esempio viene avviato un processo che ordina gli elementi nel file Testsort.txt e restituisce gli elementi ordinati nei file Sorted.txt. Eventuali errori vengono scritti nel file di SortError.txt. Il parametro UseNewEnvironment specifica che il processo viene eseguito con le proprie variabili di ambiente.
$processOptions = @{
FilePath = "sort.exe"
RedirectStandardInput = "TestSort.txt"
RedirectStandardOutput = "Sorted.txt"
RedirectStandardError = "SortError.txt"
UseNewEnvironment = $true
}
Start-Process @processOptions
In questo esempio viene usato lo splatting per passare i parametri al cmdlet . Per ulteriori informazioni, vedere about_Splatting.
Esempio 4: Avviare un processo in una finestra ingrandita
In questo esempio viene avviato il processo di Notepad.exe. Ingrandisce la finestra e mantiene la finestra fino al completamento del processo.
Start-Process -FilePath "notepad" -Wait -WindowStyle Maximized
Esempio 5: Avviare PowerShell come amministratore
In questo esempio PowerShell viene avviato usando l'opzione Esegui come amministratore .
Start-Process -FilePath "powershell" -Verb RunAs
Esempio 6: Uso di verbi diversi per avviare un processo
In questo esempio viene illustrato come trovare i verbi che possono essere usati all'avvio di un processo. I verbi disponibili sono determinati dall'estensione del nome file del file eseguito nel processo.
$startExe = New-Object System.Diagnostics.ProcessStartInfo -Args PowerShell.exe
$startExe.verbs
open
runas
runasuser
Nell'esempio viene utilizzato New-Object per creare un oggetto System.Diagnostics.ProcessStartInfo per PowerShell.exe, il file eseguito nel processo di PowerShell. La proprietà Verbs dell'oggetto ProcessStartInfo indica che è possibile utilizzare i verbi Open e RunAs con PowerShell.exeo con qualsiasi processo che esegue un .exe file.
Esempio 7: Specifica degli argomenti per il processo
Entrambi i comandi avviano l'interprete dei comandi di Windows, eseguendo un comando dir nella cartella Program Files. Poiché questo nome cartella contiene uno spazio, il valore deve essere racchiuso tra virgolette precedute da escape.
Si noti che il primo comando specifica una stringa come ArgumentList. Il secondo comando è una matrice di stringhe.
Start-Process -FilePath "$env:comspec" -ArgumentList "/c dir `"%systemdrive%\program files`""
Start-Process -FilePath "$env:comspec" -ArgumentList "/c","dir","`"%systemdrive%\program files`""
Esempio 8: Creare un processo scollegato in Linux
In Windows Start-Process crea un processo indipendente che rimane in esecuzione indipendentemente dalla shell di avvio. Nelle piattaforme non Windows il processo appena avviato viene collegato alla shell avviata. Se la shell di avvio è chiusa, il processo figlio viene terminato.
Per evitare di terminare il processo figlio su piattaforme simili a Unix, è possibile combinare Start-Process con nohup. L'esempio seguente avvia un'istanza in background di PowerShell in Linux che rimane attiva anche dopo la chiusura della sessione di avvio. Il comando nohup raccoglie l'output nel file nohup.out nella directory corrente.
# Runs for 2 minutes and appends output to ./nohup.out
Start-Process nohup 'pwsh -noprofile -c "1..120 | % { Write-Host . -NoNewline; sleep 1 }"'
In questo esempio Start-Process esegue il comando nohup Linux, che avvia pwsh come processo scollegato. Per ulteriori informazioni, vedere la pagina man di nohup.
Parametri
-ArgumentList
Specifica i parametri o i valori dei parametri da utilizzare quando questo cmdlet avvia il processo. Gli argomenti possono essere accettati come singola stringa con gli argomenti separati da spazi o come matrice di stringhe separate da virgole. Il cmdlet unisce la matrice a una singola stringa con ogni elemento della matrice separata da un singolo spazio.
Le virgolette esterne delle stringhe di PowerShell non vengono incluse quando i valori ArgumentList vengono passati al nuovo processo. Se i parametri o i valori dei parametri contengono uno spazio o virgolette, devono essere racchiusi tra virgolette doppie precedute da escape. Per altre informazioni, vedere about_Quoting_Rules.
Per ottenere risultati ottimali, utilizzare un singolo valore ArgumentList contenente tutti gli argomenti e tutti i caratteri di virgolette necessari.
Proprietà dei parametri
| Tipo: | String[] |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | Argomenti |
Set di parametri
(All)
| Posizione: | 1 |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Confirm
Richiede conferma prima di eseguire il cmdlet.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | cfr |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Credential
Specifica un account utente autorizzato a eseguire questa azione. Per impostazione predefinita, il cmdlet usa le credenziali dell'utente corrente.
Digitare un nome utente, ad esempio User01 o Domain01\User01oppure immettere un oggetto PSCredential generato dal cmdlet Get-Credential. Se si digita un nome utente, viene richiesto di immettere la password.
Le credenziali vengono archiviate in un oggetto PSCredential e la password viene archiviata come SecureString.
Annotazioni
Per ulteriori informazioni sulla protezione dei dati di SecureString, vedere Quanto è sicuro SecureString?.
Proprietà dei parametri
| Tipo: | PSCredential |
| Valore predefinito: | Current user |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | RunAs |
Set di parametri
Default
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-FilePath
Specifica il percorso facoltativo e il nome file del programma eseguito nel processo. Immettere il nome di un file eseguibile o di un documento, ad esempio un .txt file or .doc , associato a un programma nel computer. Questo parametro è obbligatorio.
Se si specifica solo un nome file, usare il parametro WorkingDirectory per specificare il percorso.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | PSPath, Percorso |
Set di parametri
(All)
| Posizione: | 0 |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-LoadUserProfile
Indica che questo cmdlet carica il profilo utente di Windows archiviato nella chiave del Registro di sistema HKEY_USERS per l'utente corrente. Il parametro non si applica ai sistemi non Windows.
Questo parametro non influisce sui profili di PowerShell. Per altre informazioni, vedere about_Profiles.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | Lup |
Set di parametri
Default
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-NoNewWindow
Avviare il nuovo processo nella finestra della console corrente. Per impostazione predefinita in Windows, PowerShell apre una nuova finestra. Nei sistemi non Windows non si ottiene mai una nuova finestra.
Non è possibile utilizzare i parametri NoNewWindow e WindowStyle nello stesso comando.
Il parametro non si applica ai sistemi non Windows.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | Nno |
Set di parametri
Default
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-PassThru
Restituisce un oggetto processo per ogni processo avviato dal cmdlet. Per impostazione predefinita, questo cmdlet non genera alcun output.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-RedirectStandardError
Specifica un file. Questo cmdlet invia eventuali errori generati dal processo a un file specificato. Immettere il percorso e il nome file. Per impostazione predefinita, gli errori vengono visualizzati nella console.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | RSE |
Set di parametri
Default
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-RedirectStandardInput
Specifica un file. Questo cmdlet legge l'input dal file specificato. Immettere il percorso e il nome del file di input. Per impostazione predefinita, il processo ottiene l'input dalla tastiera.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | RSI |
Set di parametri
Default
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-RedirectStandardOutput
Specifica un file. Questo cmdlet invia l'output generato dal processo a un file specificato. Immettere il percorso e il nome file. Per impostazione predefinita, l'output viene visualizzato nella console.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | RSO |
Set di parametri
Default
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-UseNewEnvironment
Indica che questo cmdlet usa nuove variabili di ambiente specificate per il processo. Per impostazione predefinita, il processo avviato viene eseguito con le variabili di ambiente ereditate dal processo padre.
In Windows, quando si usa UseNewEnvironment, il nuovo processo inizia solo contenente le variabili di ambiente predefinite definite per l'ambito machine. Questo ha l'effetto collaterale che è $env:USERNAME impostato su SYSTEM. Nessuna delle variabili dell'ambito utente di è inclusa.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
Default
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Verb
Specifica un verbo da utilizzare quando questo cmdlet avvia il processo. I verbi disponibili sono determinati dall'estensione del nome file del file eseguito nel processo.
La tabella seguente illustra i verbi per alcuni tipi di file di processo comuni.
| Tipo di file | verbi |
|---|---|
| .cmd | Modifica, Apri, Stampa, RunAs, RunAsUser |
| .exe | Apri, RunAs, Esegui come utente |
| .txt | Apri, Stampa, PrintTo |
| .wav | Apri, Gioca |
Per trovare i verbi che possono essere usati con il file eseguito in un processo, utilizzare il cmdlet New-Object per creare un oggetto System.Diagnostics.ProcessStartInfo per il file. I verbi disponibili si trovano nella proprietà verbi dell'oggetto ProcessStartInfo. Per informazioni dettagliate, vedere gli esempi.
Il parametro non si applica ai sistemi non Windows.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
UseShellExecute
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Wait
Indica che questo cmdlet attende il completamento del processo specificato e dei relativi discendenti prima di accettare più input. Questo parametro elimina il prompt dei comandi o mantiene la finestra fino al termine dei processi.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-WhatIf
Mostra gli effetti dell'esecuzione del cmdlet. Il cmdlet non viene eseguito.
Questo parametro è stato introdotto in PowerShell 6.0.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | Wi |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-WindowStyle
Specifica lo stato della finestra utilizzata per il nuovo processo. I valori accettabili per questo parametro sono: Normale, Nascosto, Minimizzato e Ingrandito. Il valore predefinito è Normal.
Non è possibile utilizzare i parametri WindowStyle e NoNewWindow nello stesso comando.
Il parametro non si applica ai sistemi non Windows. Quando si usa in sistemi non Windows, non si ottiene mai una nuova finestra.
Proprietà dei parametri
| Tipo: | ProcessWindowStyle |
| Valore predefinito: | None |
| Valori accettati: | Normal, Hidden, Minimized, Maximized |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-WorkingDirectory
Specifica il percorso in cui deve essere avviato il nuovo processo. Il valore predefinito è il percorso del file eseguibile o del documento avviato. I caratteri jolly non sono supportati. Il nome del percorso non deve contenere caratteri che verrebbero interpretati come caratteri jolly.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
CommonParameters
Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.
Input
None
Non è possibile inviare tramite pipe l'input a questo cmdlet.
Output
None, System.Diagnostics.Process
Questo cmdlet genera un oggetto System.Diagnostics.Process se si specifica il parametro PassThru . In caso contrario, questo cmdlet non restituisce alcun output.
Note
Per impostazione predefinita, Start-Process avvia un processo in modo asincrono. Il controllo viene restituito immediatamente a PowerShell anche se il nuovo processo è ancora in esecuzione.
- Nel sistema locale, il processo avviato si trova indipendentemente dal processo chiamante.
- In un sistema remoto il nuovo processo viene terminato al termine della sessione remota, immediatamente dopo il comando
Start-Process. Pertanto, non è possibile utilizzareStart-Processin una sessione remota prevedendo che il processo avviato sopravviva alla sessione.
Se è necessario usare Start-Process in una sessione remota, richiamarlo con il parametro Wait. In alternativa, è possibile usare altri metodi per creare un nuovo processo nel sistema remoto.
Quando si usa il parametro Wait , Start-Process attende che l'albero del processo (il processo e tutti i relativi discendenti) venga chiuso prima di restituire il controllo. Questo comportamento è diverso dal comportamento del cmdlet Wait-Process, che attende solo l'uscita dei processi specificati.
In Windows, il caso d'uso più comune per Start-Process consiste nell'usare il parametro wait per bloccare lo stato di avanzamento fino all'uscita del nuovo processo. In un sistema non Windows, questa operazione è raramente necessaria perché il comportamento predefinito per le applicazioni da riga di comando equivale a Start-Process -Wait.
Questo cmdlet viene implementato utilizzando il metodo Start della classe System.Diagnostics.Process . Per altre informazioni su questo metodo, vedere Metodo Process.Start.