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 native execv()
Funktion auf, um ein ähnliches Verhalten wie POSIX-Shells bereitzustellen. Dieses Cmdlet und sein Alias wurden exec
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, ist das ssh-copy-id
Skript erfolgreich.
Parameter
-WithCommand
Gibt die native 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 native ausführbare Datei sein, kein PowerShell-Befehl.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
String[]
Ausgaben
Hinweise
Das Switch-Process
Cmdlet wurde erstellt, um die Kompatibilität mit anderen POSIX-Shells zu gewährleisten exec
. Unter normalen Bedingungen ist das Cmdlet nicht für die Verwendung in PowerShell-Skripts vorgesehen. Switch-Process
hat keine Featureparität mit der integrierten Funktion in exec
POSIX-Shells, z. B. wie Dateideskriptoren behandelt werden, sollte aber die meisten Fälle abdecken.