Switch-Process
Unter Linux und macOS ruft das Cmdlet die execv()
Funktion auf, um ein ähnliches Verhalten wie POSIX-Shells bereitzustellen.
Syntax
Switch-Process
[[-WithCommand] <String[]>]
[<CommonParameters>]
Beschreibung
Einige native Unix-Befehle führen eine Shell aus, um etwas auszuführen (z. B. SSH), und verwenden den integrierten bash
-Befehl exec
, um einen neuen Prozess zu erstellen, der den aktuellen ersetzt. Standardmäßig ist exec
kein gültiger Befehl in PowerShell. Dies betrifft einige bekannte Skripts wie copy-ssh-id
und einige Unterprojekte von AzCLI.
Das Switch-Process
Cmdlet ruft die systemeigene execv()
Funktion auf, um ein ähnliches Verhalten wie POSIX-Shells bereitzustellen. Dieses Cmdlet und sein Alias exec
wurden in PowerShell 7.3.0 hinzugefügt.
In PowerShell 7.3.1 wurde das exec
-Alias in eine Funktion geändert, die Switch-Process
umschließt. Mit der Funktion können Sie Parameter an den nativen Befehl übergeben, die möglicherweise fälschlicherweise an den WithCommand-Parameter gebunden wurden.
Dieses Cmdlet ist nur für Systeme verfügbar, die nicht auf Windows basieren.
Beispiele
Beispiel 1: Ausführen eines Befehls, der von "exec" abhängt
In diesem Beispiel wird davon ausgegangen, dass PowerShell die Standardshell auf einem Nicht-Windows-System ist. ssh-copy-id
ist ein beliebtes Bash-Skript zum Bereitstellen öffentlicher Schlüssel auf Zielcomputern für die schlüsselbasierte Authentifizierung. Das Skript hängt vom Bash-Befehl ab. exec
ssh-copy-id user@host
Wenn das PSExec
Feature aktiviert ist, wird das ssh-copy-id
Skript erfolgreich ausgeführt.
Parameter
-WithCommand
Gibt die systemeigene ausführbare Datei (und alle Parameter) an, die ausgeführt werden sollen. Alle als Argumente übergebenen zusätzlichen Werte werden als Array von Zeichenfolgen übergeben, die mit dem ersten Befehl ausgeführt werden sollen.
Der Zielbefehl muss eine systemeigene ausführbare Datei und kein PowerShell-Befehl sein.
Typ: | String[] |
Position: | 0 |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingaben
String[]
Ausgaben
Hinweise
Das Switch-Process
Cmdlet wurde erstellt, um Kompatibilität bereitzustellen exec
, sind andere POSIX-Shells. Unter normalen Bedingungen ist das Cmdlet nicht für die Verwendung in PowerShell-Skripts vorgesehen. Switch-Process
verfügt nicht über die Featureparität mit der integrierten Funktion in POSIX-Shells exec
, z. B. wie Dateideskriptoren behandelt werden, sollten aber die meisten Fälle abdecken.