Start-Process
Startet Prozesse auf dem lokalen Computer.
Syntax
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>]
Start-Process
[-FilePath] <String>
[[-ArgumentList] <String[]>]
[-WorkingDirectory <String>]
[-PassThru]
[-Verb <String>]
[-WindowStyle <ProcessWindowStyle>]
[-Wait]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Beschreibung
Das Start-Process
Cmdlet startet einen oder mehrere Prozesse auf dem lokalen Computer. Erstellt standardmäßig einen neuen Prozess, Start-Process
der alle Im aktuellen Prozess definierten Umgebungsvariablen erbt.
Um das Programm anzugeben, das im Prozess ausgeführt wird, geben Sie eine ausführbare Datei oder Skriptdatei oder eine Datei ein, die mit einem Programm auf dem Computer geöffnet werden kann. Wenn Sie eine nicht ausführbare Datei angeben, Start-Process
startet das Programm, das der Datei zugeordnet ist, ähnlich wie beim Invoke-Item
Cmdlet.
Sie können die Parameter von Start-Process
verwenden, um Optionen anzugeben, z. B. das Laden eines Benutzerprofils, das Starten des Prozesses in einem neuen Fenster oder die Verwendung alternativer Anmeldeinformationen.
Beispiele
Beispiel 1: Starten eines Prozesses, der Standardwerte verwendet
In diesem Beispiel wird ein Prozess gestartet, der die Sort.exe
Datei im aktuellen Ordner verwendet. Der Befehl verwendet alle Standardwerte, einschließlich des Standardfensterstils, des Arbeitsordners und der Anmeldeinformationen.
Start-Process -FilePath "sort.exe"
Beispiel 2: Drucken einer Textdatei
In diesem Beispiel wird ein Prozess gestartet, der die C:\PS-Test\MyFile.txt
Datei ausgibt.
Start-Process -FilePath "myfile.txt" -WorkingDirectory "C:\PS-Test" -Verb Print
Beispiel 3: Starten eines Prozesses zum Sortieren von Elementen in einer neuen Datei
In diesem Beispiel wird ein Prozess gestartet, der Elemente in der TestSort.txt
Datei sortiert und die sortierten Elemente in den Sorted.txt
Dateien zurückgibt. Alle Fehler werden in die SortError.txt
Datei geschrieben. Der Parameter UseNewEnvironment gibt an, dass der Prozess mit eigenen Umgebungsvariablen ausgeführt wird.
$processOptions = @{
FilePath = "sort.exe"
RedirectStandardInput = "TestSort.txt"
RedirectStandardOutput = "Sorted.txt"
RedirectStandardError = "SortError.txt"
UseNewEnvironment = $true
}
Start-Process @processOptions
In diesem Beispiel wird splatting verwendet, um Parameter an das Cmdlet zu übergeben. Weitere Informationen finden Sie unter about_Splatting.
Beispiel 4: Starten eines Prozesses in einem maximierten Fenster
In diesem Beispiel wird der Notepad.exe
Prozess gestartet. Das Fenster wird maximiert und beibehalten, bis der Prozess abgeschlossen wurde.
Start-Process -FilePath "notepad" -Wait -WindowStyle Maximized
Beispiel 5: Starten von PowerShell als Administrator
In diesem Beispiel wird PowerShell mit der Option Als Administrator ausführen gestartet.
Start-Process -FilePath "powershell" -Verb RunAs
Beispiel 6: Verwenden verschiedener Verben zum Starten eines Prozesses
In diesem Beispiel wird gezeigt, wie Sie die Verben finden, die beim Starten eines Prozesses verwendet werden können. Die verfügbaren Verben werden durch die Dateinamenerweiterung der Datei bestimmt, die im Prozess ausgeführt wird.
$startExe = New-Object System.Diagnostics.ProcessStartInfo -Args powershell.exe
$startExe.verbs
open
runas
runasuser
Im Beispiel wird verwendet New-Object
, um ein System.Diagnostics.ProcessStartInfo-Objekt für powershell.exe
zu erstellen, die Datei, die im PowerShell-Prozess ausgeführt wird. Die Verbs-Eigenschaft des ProcessStartInfo-Objekts zeigt, dass Sie die Verben Open und RunAs
mit powershell.exe
oder mit einem beliebigen Prozess verwenden können, der eine .exe
Datei ausführt.
Beispiel 7: Angeben von Argumenten für den Prozess
Beide Befehle starten den Windows-Befehlsinterpreter und geben einen dir
Befehl für den Program Files
Ordner aus. Da dieser Ordnername ein Leerzeichen enthält, muss der Wert mit Escapezeichen umgeben sein.
Beachten Sie, dass der erste Befehl eine Zeichenfolge als ArgumentList angibt. Der zweite Befehl ist ein Zeichenfolgenarray.
Start-Process -FilePath "$env:comspec" -ArgumentList "/c dir `"%SystemDrive%\Program Files`""
Start-Process -FilePath "$env:comspec" -ArgumentList "/c","dir","`"%SystemDrive%\Program Files`""
Beispiel 8: Create eines getrennten Prozesses unter Linux
Unter Windows erstellt einen unabhängigen Prozess, Start-Process
der unabhängig von der Startshell ausgeführt wird. Auf Nicht-Windows-Plattformen wird der neu gestartete Prozess an die Shell angefügt, die gestartet wurde. Wenn die Startshell geschlossen wird, wird der untergeordnete Prozess beendet.
Um das Beenden des untergeordneten Prozesses auf Unix-ähnlichen Plattformen zu vermeiden, können Sie mit nohup
kombinierenStart-Process
. Im folgenden Beispiel wird eine Hintergrund-instance von PowerShell unter Linux gestartet, die auch nach dem Schließen der Startsitzung aktiv bleibt. Der nohup
Befehl erfasst die Ausgabe in der Datei nohup.out
im aktuellen Verzeichnis.
# Runs for 2 minutes and appends output to ./nohup.out
Start-Process nohup 'pwsh -noprofile -c "1..120 | % { Write-Host . -NoNewline; sleep 1 }"'
In diesem Beispiel Start-Process
wird der Linux-Befehl nohup
ausgeführt, der als getrennter Prozess gestartet pwsh
wird. Weitere Informationen finden Sie im Nohup-Artikel auf Wikipedia.
Parameter
-ArgumentList
Gibt Parameter oder Parameterwerte an, die verwendet werden sollen, wenn dieses Cmdlet den Prozess startet. Argumente können als einzelne Zeichenfolge akzeptiert werden, wobei die Argumente durch Leerzeichen getrennt sind, oder als Array von Zeichenfolgen, die durch Kommas getrennt sind. Das Cmdlet verknüpft das Array in einer einzelnen Zeichenfolge, wobei jedes Element des Arrays durch ein einzelnes Leerzeichen getrennt ist.
Die äußeren Anführungszeichen der PowerShell-Zeichenfolgen werden nicht eingeschlossen, wenn die ArgumentList-Werte an den neuen Prozess übergeben werden. Wenn Parameter oder Parameterwerte ein Leerzeichen oder Anführungszeichen enthalten, müssen sie mit doppelten Escapezeichen umgeben werden. Weitere Informationen finden Sie unter about_Quoting_Rules.
Um optimale Ergebnisse zu erzielen, verwenden Sie einen einzelnen ArgumentList-Wert , der alle Argumente und alle erforderlichen Anführungszeichen enthält.
Type: | String[] |
Aliases: | Args |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Confirm
Hiermit werden Sie vor der Ausführung des Cmdlets zur Bestätigung aufgefordert.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
Gibt ein Benutzerkonto an, das über die Berechtigung zum Ausführen dieser Aktion verfügt. Standardmäßig verwendet das Cmdlet die Anmeldeinformationen des aktuellen Benutzers.
Geben Sie einen Benutzernamen ein, z. B. User01 oder Domain01\User01, oder geben Sie ein vom Get-Credential
Cmdlet generiertes PSCredential-Objekt ein. Wenn Sie einen Benutzernamen eingeben, werden Sie aufgefordert, das Kennwort einzugeben.
Anmeldeinformationen werden in einem PSCredential-Objekt gespeichert, und das Kennwort wird als SecureString gespeichert.
Hinweis
Weitere Informationen zum Schutz von SecureString-Daten finden Sie unter Wie sicher ist SecureString?.
Type: | PSCredential |
Aliases: | RunAs |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilePath
Gibt den optionalen Pfad und Dateinamen des Programms an, das im Prozess ausgeführt wird. Geben Sie den Namen einer ausführbaren Datei oder eines Dokuments ein, z. B. einer .txt
- oder .doc
-Datei, die einem Programm auf dem Computer zugeordnet ist. Dieser Parameter ist erforderlich.
Wenn Sie nur einen Dateinamen angeben, der nicht einem Systembefehl entspricht, verwenden Sie den Parameter WorkingDirectory , um den Pfad anzugeben.
Type: | String |
Aliases: | PSPath, Path |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-LoadUserProfile
Gibt an, dass dieses Cmdlet das windows-Benutzerprofil lädt, das HKEY_USERS
im Registrierungsschlüssel für den aktuellen Benutzer gespeichert ist. Der Parameter gilt nicht für Nicht-Windows-Systeme.
Dieser Parameter wirkt sich nicht auf die PowerShell-Profile aus. Weitere Informationen finden Sie unter about_Profiles.
Type: | SwitchParameter |
Aliases: | Lup |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-NoNewWindow
Startet den neuen Prozess im aktuellen Konsolenfenster. Unter Windows öffnet PowerShell standardmäßig ein neues Fenster. Auf Nicht-Windows-Systemen erhalten Sie nie ein neues Fenster.
Sie können die Parameter NoNewWindow und WindowStyle nicht im gleichen Befehl verwenden.
Der Parameter gilt nicht für Nicht-Windows-Systeme.
Type: | SwitchParameter |
Aliases: | nnw |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PassThru
Gibt ein Prozessobjekt für jeden Prozess zurück, der vom Cmdlet gestartet wurde. Standardmäßig generiert dieses Cmdlet keine Ausgabe.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RedirectStandardError
Gibt eine Datei an. Dieses Cmdlet sendet alle vom Prozess generierten Fehler an eine von Ihnen angegebene Datei. Geben Sie den Pfad und den Dateinamen ein. Standardmäßig werden die Fehler in der Konsole angezeigt.
Type: | String |
Aliases: | RSE |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RedirectStandardInput
Gibt eine Datei an. Dieses Cmdlet liest Eingaben aus der angegebenen Datei. Geben Sie den Pfad und den Dateinamen der Eingabedatei ein. Standardmäßig ruft der Prozess die Eingabe von der Tastatur ab.
Type: | String |
Aliases: | RSI |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RedirectStandardOutput
Gibt eine Datei an. Dieses Cmdlet sendet die vom Prozess generierte Ausgabe an eine von Ihnen angegebene Datei. Geben Sie den Pfad und den Dateinamen ein. Standardmäßig wird die Ausgabe in der Konsole angezeigt.
Type: | String |
Aliases: | RSO |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseNewEnvironment
Gibt an, dass dieses Cmdlet neue Umgebungsvariablen verwendet, die für den Prozess angegeben sind. Standardmäßig wird der gestartete Prozess mit den Umgebungsvariablen ausgeführt, die vom übergeordneten Prozess geerbt wurden.
Wenn Sie unter Windows UseNewEnvironment verwenden, beginnt der neue Prozess nur mit den Standardumgebungsvariablen, die für den Bereich Computer definiert sind. Dies hat den Nebeneffekt, dass auf $env:USERNAME
SYSTEM festgelegt ist. Keine der Variablen aus dem Benutzerbereich ist enthalten.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Verb
Gibt ein Verb an, das verwendet werden soll, wenn dieses Cmdlet den Prozess startet. Die verfügbaren Verben werden durch die Dateinamenerweiterung der Datei bestimmt, die im Prozess ausgeführt wird.
Die folgende Tabelle enthält die Verben für einige allgemeine Prozessdateitypen:
Dateityp | Verben |
---|---|
.cmd | Edit , Open , Print , RunAs , RunAsUser |
.exe | Open , RunAs , RunAsUser |
.txt | Open , Print , PrintTo |
WAV | Open , Play |
Um die Verben zu finden, die mit der Datei verwendet werden können, die in einem Prozess ausgeführt wird, verwenden Sie das New-Object
Cmdlet, um ein System.Diagnostics.ProcessStartInfo-Objekt für die Datei zu erstellen. Die verfügbaren Verben befinden sich in der Verbs-Eigenschaft des ProcessStartInfo-Objekts . Weitere Informationen finden Sie in den Beispielen.
Der Parameter gilt nicht für Nicht-Windows-Systeme.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Wait
Gibt an, dass dieses Cmdlet wartet, bis der angegebene Prozess und seine untergeordneten Elemente abgeschlossen sind, bevor weitere Eingaben akzeptiert werden. Dieser Parameter unterdrückt die Eingabeaufforderung oder behält das Fenster bei, bis die Prozesse abgeschlossen sind.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WhatIf
Zeigt, was geschieht, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.
Dieser Parameter wurde in PowerShell 6.0 eingeführt.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WindowStyle
Gibt den Status des Fensters an, das für den neuen Prozess verwendet wird. Standardwert: Normal
.
Zulässige Werte für diesen Parameter:
Normal
Hidden
Minimized
Maximized
Sie können die Parameter WindowStyle und NoNewWindow nicht im selben Befehl verwenden.
Der Parameter gilt nicht für Nicht-Windows-Systeme. Wenn Sie auf Nicht-Windows-Systemen verwenden, erhalten Sie nie ein neues Fenster.
Type: | ProcessWindowStyle |
Accepted values: | Normal, Hidden, Minimized, Maximized |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WorkingDirectory
Gibt den Speicherort an, an dem der neue Prozess gestartet werden soll.
Wenn es nicht angegeben ist, wird das Cmdlet standardmäßig auf den vollqualifizierten Speicherort festgelegt, der im FilePath-Parameter angegeben ist. Wenn der Wert des FilePath-Parameters nicht voll qualifiziert ist, wird standardmäßig das aktuelle Arbeitsverzeichnis des aufrufenden Prozesses verwendet.
Platzhalter werden nicht unterstützt. Der Pfad darf keine Zeichen enthalten, die als Feldhalter interpretiert würden.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
None
Sie können keine Objekte an dieses Cmdlet übergeben.
Ausgaben
None
Standardmäßig gibt dieses Cmdlet keine Ausgabe zurück.
Wenn Sie den PassThru-Parameter verwenden, gibt dieses Cmdlet ein Process-Objekt zurück.
Hinweise
PowerShell enthält die folgenden Aliase für Start-Process
:
- Alle Plattformen
saps
- Windows
start
Native Befehle sind ausführbare Dateien, die im Betriebssystem installiert sind. Diese ausführbaren Dateien können über eine beliebige Befehlszeilenshell wie PowerShell ausgeführt werden. In der Regel führen Sie den Befehl genau wie in bash
oder cmd.exe
aus. Das Start-Process
Cmdlet kann zum Ausführen von nativen Befehlen verwendet werden, sollte aber nur verwendet werden, wenn Sie steuern müssen, wie der Befehl ausgeführt wird.
Start-Process
ist nützlich für die Ausführung von GUI-Programmen auf Nicht-Windows-Plattformen. Führen Sie beispielsweise aus Start-Proces gedit
, um den grafischen Text-Editor zu starten, der in gnome Desktop-Umgebungen üblich ist.
Standardmäßig Start-Process
wird ein Prozess asynchron gestartet. Die Steuerung wird sofort an PowerShell zurückgegeben, auch wenn der neue Prozess noch ausgeführt wird.
- Auf dem lokalen System lebt der gestartete Prozess unabhängig vom aufrufenden Prozess.
- Auf einem Remotesystem wird der neue Prozess beendet, wenn die Remotesitzung beendet wird, unmittelbar nach dem
Start-Process
Befehl. Daher können Sie nicht in einer Remotesitzung verwendenStart-Process
, bei der erwartet wird, dass der gestartete Prozess die Sitzung überdauert.
Wenn Sie in einer Remotesitzung verwenden Start-Process
müssen, rufen Sie sie mit dem Wait-Parameter auf. Sie können auch andere Methoden verwenden, um einen neuen Prozess auf dem Remotesystem zu erstellen.
Bei Verwendung des Wait-Parameters wartet, bis die Prozessstruktur (der Prozess und alle seine Nachfolger) beendet wird, Start-Process
bevor die Steuerung zurückgegeben wird. Dies unterscheidet sich vom Verhalten des Wait-Process
Cmdlets, das nur auf das Beenden der angegebenen Prozesse wartet.
Unter Windows besteht der häufigste Anwendungsfall für Start-Process
darin, den Wait-Parameter zu verwenden, um den Fortschritt zu blockieren, bis der neue Prozess beendet wird. Auf Einem Nicht-Windows-System ist dies selten erforderlich, da das Standardverhalten für Befehlszeilenanwendungen entspricht Start-Process -Wait
.
Dieses Cmdlet wird mithilfe der Start-Methode der System.Diagnostics.Process-Klasse implementiert. Weitere Informationen zu dieser Methode finden Sie unter Process.Start-Methode.