Switch-Process

On Linux and macOS, the cmdlet calls the execv() function to provide similar behavior as POSIX shells.

Syntax

Switch-Process
      [[-WithCommand] <String[]>]
      [<CommonParameters>]

Description

Some native Unix commands shell out to run something (like ssh) and use the bash built-in command exec to spawn a new process that replaces the current one. By default, exec isn't a valid command in PowerShell. This is affecting some known scripts like copy-ssh-id and some subcommands of AzCLI.

Starting in PowerShell 7.3-preview.8, the Switch-Process cmdlet is aliased to exec . The cmdlet calls execv() function to provide similar behavior as POSIX shells.

PowerShell 7.3.1 changed the exec alias to a function that wraps Switch-Process . The function allows you to pass parameters to the native command that might have erroneously bound to the WithCommand parameter.

This cmdlet is only available for non-Windows systems.

Examples

Example 1 - Execute a command that depends on `exec`

This example assumes that PowerShell is the default shell on a non-Windows system. ssh-copy-id is a popular bash script to deploy public keys on target machines for key-based authentication. The script depends on the bash command, exec .

ssh-copy-id user@host

With the PSExec feature enabled, the ssh-copy-id script succeeds.

Parameters

-WithCommand

Specifies the native executable (and any parameters) to be run. All additional values passed as arguments are passed as an array of strings to be executed with the first command.

The target command must be a native executable, not a PowerShell command.

Type: String [ ]
Position: 0
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

Inputs

String [ ]

Outputs

Object

Notes

This feature isn't intended to have parity with the built-in exec function in POSIX shells (like how file descriptors are handled), but should cover most cases.

The Switch-Process cmdlet was created to provide exec compatibility is other POSIX shells. Under normal conditions, the cmdlet isn't intended to be used in PowerShell scripts.

  • Using experimental features
  • about_Experimental_Features