Start-Process
Startet einen oder mehrere 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]
[-Environment <hashtable>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Start-Process
[-FilePath] <string>
[[-ArgumentList] <string[]>]
[-WorkingDirectory <string>]
[-PassThru]
[-Verb <string>]
[-WindowStyle <ProcessWindowStyle>]
[-Wait]
[-Environment <hashtable>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Beschreibung
Das Cmdlet Start-Process
startet einen oder mehrere Prozesse auf dem lokalen Computer. Standardmäßig erstellt Start-Process
einen neuen Prozess, der alle Umgebungsvariablen erbt, die im aktuellen Prozess definiert sind.
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, startet Start-Process
das Programm, das der Datei zugeordnet ist, ähnlich dem cmdlet Invoke-Item
.
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 druckt.
Start-Process -FilePath "myfile.txt" -WorkingDirectory "C:\PS-Test" -Verb Print
Beispiel 3: Starten eines Prozesses zum Sortieren von Elementen in eine neue 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 UseNewEnvironment Parameter 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 das 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. Es maximiert das Fenster und behält das Fenster bei, bis der Vorgang abgeschlossen ist.
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 New-Object
verwendet, 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 Open und RunAs
Verben 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-Befehlsdolmetscher und geben einen dir
Befehl im ordner Program Files
aus. Da dieser Ordnername ein Leerzeichen enthält, muss der Wert in Escapezeichen eingeschlossen 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: Erstellen eines getrennten Prozesses unter Linux
Unter Windows erstellt Start-Process
einen unabhängigen Prozess, der unabhängig von der Startshell ausgeführt wird. Auf Nicht-Windows-Plattformen wird der neu gestartete Prozess an die gestartete Shell angefügt. Wenn die Startshell geschlossen ist, wird der untergeordnete Prozess beendet.
Um das Beenden des untergeordneten Prozesses auf Unix-ähnlichen Plattformen zu vermeiden, können Sie Start-Process
mit nohup
kombinieren. Im folgenden Beispiel wird eine Hintergrundinstanz von PowerShell unter Linux gestartet, die auch nach dem Schließen der Startsitzung aktiv bleibt. Der Befehl nohup
erfasst die Ausgabe in 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 wird Start-Process
den Linux-nohup
-Befehl ausführen, der pwsh
als getrennten Prozess startet. Weitere Informationen finden Sie im nohup Artikel zu Wikipedia.
Beispiel 9: Überschreiben einer Umgebungsvariable für einen Prozess
Wenn Sie Start-Process
verwenden, wird standardmäßig der neue Prozess mit den gleichen Umgebungsvariablen wie die aktuelle Sitzung erstellt. Sie können den Parameter Environment verwenden, um die Werte dieser Variablen außer Kraft zu setzen.
In diesem Beispiel wird die Umgebungsvariable FOO
der Sitzung mit foo
als Wert hinzugefügt.
Im Beispiel wird Start-Process
dreimal ausgeführt, wobei der Wert FOO
jedes Mal zurückgegeben wird. Der erste Befehl überschreibt die Umgebungsvariable nicht. Im zweiten Befehl wird FOO
auf bar
festgelegt. Im dritten Befehl wird FOO
auf $null
festgelegt, wodurch er entfernt wird.
$env:FOO = 'foo'
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$env:FOO'
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$env:FOO' -Environment @{
FOO = 'bar'
}
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$env:FOO' -Environment @{
FOO = $null
}
foo
bar
Parameter
-ArgumentList
Gibt Parameter oder Parameterwerte an, die verwendet werden sollen, wenn dieses Cmdlet den Prozess startet. Argumente können als einzelne Zeichenfolge mit den durch Leerzeichen getrennten Argumenten oder als Array von Zeichenfolgen akzeptiert werden, die durch Kommas getrennt sind. Das Cmdlet verknüpft das Array mit einer einzelnen Zeichenfolge mit jedem Element des Arrays, das durch ein einzelnes Leerzeichen getrennt ist.
Die äußeren Anführungszeichen der PowerShell-Zeichenfolgen sind nicht enthalten, wenn die ArgumentList- Werte an den neuen Prozess übergeben werden. Wenn Parameter oder Parameterwerte ein Leerzeichen oder Anführungszeichen enthalten, müssen sie mit escaped doppelten Anführungszeichen umgeben sein. 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.
Typ: | String[] |
Aliase: | Args |
Position: | 1 |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Confirm
Fordert Sie vor dem Ausführen des Cmdlets zur Bestätigung auf.
Typ: | SwitchParameter |
Aliase: | cf |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | 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 PSCredential-Objekt ein, das vom cmdlet Get-Credential
generiert wird. 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.
Anmerkung
Weitere Informationen zu SecureString Datenschutz finden Sie unter Wie sicher ist SecureString?.
Typ: | PSCredential |
Aliase: | RunAs |
Position: | Named |
Standardwert: | Current user |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Environment
Gibt mindestens eine Umgebungsvariable an, die für den Prozess als Hashtabelle außer Kraft setzen soll. Geben Sie den Namen einer Umgebungsvariable als Schlüssel in der Hashtabelle und den gewünschten Wert an. Wenn Sie eine Umgebungsvariable aufheben möchten, geben Sie den Wert als $null
an.
Die angegebenen Variablen werden im Prozess ersetzt. Wenn Sie die PATH
Umgebungsvariable angeben, wird sie durch den Wert $PSHOME
gefolgt vom angegebenen Wert aus diesem Parameter ersetzt. Unter Windows fügt der Befehl die Werte für PATH
im Computer- und Benutzerbereich nach dem neuen Wert an.
Dieser Parameter wurde in PowerShell 7.4 hinzugefügt.
Typ: | Hashtable |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | 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. eine .txt
oder .doc
Datei, die einem Programm auf dem Computer zugeordnet ist. Dieser Parameter ist erforderlich.
Wenn Sie nur einen Dateinamen angeben, der keinem Systembefehl entspricht, verwenden Sie den Parameter WorkingDirectory, um den Pfad anzugeben.
Typ: | String |
Aliase: | PSPath, Path |
Position: | 0 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-LoadUserProfile
Gibt an, dass dieses Cmdlet das Windows-Benutzerprofil lädt, das im HKEY_USERS
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.
Typ: | SwitchParameter |
Aliase: | Lup |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-NoNewWindow
Starten Sie 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 selben Befehl verwenden.
Der Parameter gilt nicht für Nicht-Windows-Systeme.
Typ: | SwitchParameter |
Aliase: | nnw |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-PassThru
Gibt ein Prozessobjekt für jeden Prozess zurück, den das Cmdlet gestartet hat. Standardmäßig generiert dieses Cmdlet keine Ausgabe.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | 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 dateinamen ein. Standardmäßig werden die Fehler in der Konsole angezeigt.
Typ: | String |
Aliase: | RSE |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-RedirectStandardInput
Gibt eine Datei an. Dieses Cmdlet liest Eingaben aus der angegebenen Datei. Geben Sie den Pfad und dateinamen der Eingabedatei ein. Standardmäßig ruft der Prozess seine Eingabe von der Tastatur ab.
Typ: | String |
Aliase: | RSI |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | 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 dateinamen ein. Standardmäßig wird die Ausgabe in der Konsole angezeigt.
Typ: | String |
Aliase: | RSO |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | 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 UseNewEnvironmentverwenden, beginnt der neue Prozess nur mit den Standardumgebungsvariablen, die für den Bereich Computer definiert sind. Dies hat den Nebeneffekt, dass die $env:USERNAME
auf SYSTEM-festgelegt ist. Keine der Variablen aus dem Bereich User sind enthalten.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | 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.
In der folgenden Tabelle sind die Verben für einige gängige Prozessdateitypen aufgeführt.
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 Cmdlet New-Object
, 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. Ausführliche Informationen finden Sie in den Beispielen.
Der Parameter gilt nicht für Nicht-Windows-Systeme.
Typ: | String |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Wait
Gibt an, dass dieses Cmdlet auf den angegebenen Prozess und dessen Nachfolger wartet, bevor weitere Eingaben akzeptiert werden. Dieser Parameter unterdrückt die Eingabeaufforderung oder behält das Fenster bei, bis die Prozesse abgeschlossen sind.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-WhatIf
Zeigt, was passiert, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.
Dieser Parameter wurde in PowerShell 6.0 eingeführt.
Typ: | SwitchParameter |
Aliase: | wi |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-WindowStyle
Gibt den Status des Fensters an, das für den neuen Prozess verwendet wird. Der Standardwert ist Normal
.
Die zulässigen Werte für diesen Parameter sind:
Normal
Hidden
Minimized
Maximized
Sie können die WindowStyle und NoNewWindow Parameter 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.
Typ: | ProcessWindowStyle |
Zulässige Werte: | Normal, Hidden, Minimized, Maximized |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-WorkingDirectory
Gibt den Speicherort an, an dem der neue Prozess beginnen soll.
Wenn dies nicht angegeben ist, verwendet das Cmdlet standardmäßig den vollqualifizierten Speicherort, der im parameter FilePath angegeben ist. Wenn der Wert des FilePath-Parameters nicht vollqualifizierte ist, wird standardmäßig das aktuelle Arbeitsverzeichnis des aufrufenden Prozesses verwendet.
Wildcards werden nicht unterstützt. Der Pfad darf keine Zeichen enthalten, die als Wildcards interpretiert werden.
Typ: | String |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingaben
None
Sie können keine Objekte an dieses Cmdlet weiterleiten.
Ausgaben
None
Standardmäßig gibt dieses Cmdlet keine Ausgabe zurück.
Wenn Sie den parameter PassThru verwenden, gibt dieses Cmdlet ein Process-Objekt zurück.
Hinweise
PowerShell enthält die folgenden Aliase für Start-Process
:
- Alle Plattformen
saps
- Fenster
start
Systemeigene Befehle sind ausführbare Dateien, die im Betriebssystem installiert sind. Diese ausführbaren Dateien können über jede Befehlszeilenshell wie PowerShell ausgeführt werden. In der Regel führen Sie den Befehl genau wie in bash
oder cmd.exe
aus. Das cmdlet Start-Process
kann verwendet werden, um systemeigene Befehle auszuführen, sollte jedoch 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 z. B. Start-Process gedit
aus, um den grafischen Text-Editor zu starten, der die GÄNGIGEn UMGEBUNGEN DES DESKTOPS FÜR COMPUTERUMGEBUNGEN verwendet.
Standardmäßig startet Start-Process
einen Prozess asynchron. Die Steuerung wird sofort an PowerShell zurückgegeben, auch wenn der neue Prozess noch ausgeführt wird.
- Im lokalen System lebt der gestartete Prozess unabhängig vom Aufrufprozess.
- Auf einem Remotesystem wird der neue Prozess beendet, wenn die Remotesitzung endet, unmittelbar nach dem Befehl
Start-Process
. Daher können SieStart-Process
nicht in einer Remotesitzung verwenden, die erwartet, dass der gestartete Prozess die Sitzung überdauert.
Wenn Sie Start-Process
in einer Remotesitzung verwenden müssen, rufen Sie sie mit dem Parameter Wait auf. Sie können auch andere Methoden verwenden, um einen neuen Prozess auf dem Remotesystem zu erstellen.
Wenn Sie den Parameter "Wait" verwenden, wartet Start-Process
auf das Beenden der Prozessstruktur (des Prozesses und aller untergeordneten Elemente), bevor das Steuerelement zurückgegeben wird. Dies unterscheidet sich vom Verhalten des cmdlets Wait-Process
, das nur auf das Beenden der angegebenen Prozesse wartet.
Unter Windows besteht der am häufigsten verwendete Anwendungsfall für Start-Process
darin, den Parameter "Wait" zu verwenden, um den Status zu blockieren, bis der neue Prozess beendet wird. Auf einem Nicht-Windows-System ist dies selten erforderlich, da das Standardverhalten für Befehlszeilenanwendungen Start-Process -Wait
entspricht.
Dieses Cmdlet wird mithilfe der Start--Methode der System.Diagnostics.Process Klasse implementiert. Weitere Informationen zu dieser Methode finden Sie unter Process.Start Method.