Switch-Process

在 Linux 和 macOS 上,此 cmdlet 调用 execv() 函数来提供类似于 POSIX shell 的行为。

语法

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

说明

一些原生 Unix 命令 shell out,运行某些内容(如 ssh)并使用 bash 内置命令 exec 生成一个新进程来替换当前进程。 默认情况下,exec 在 PowerShell 中不是有效的命令。 这会影响一些已知脚本,例如 copy-ssh-id 和 AzCLI 的一些子命令。

Switch-Process cmdlet 调用原生 execv() 函数来提供类似于 POSIX shell 的行为。 此 cmdlet 及其别名 exec 是在 PowerShell 7.3.0 中添加的。

PowerShell 7.3.1 将 exec 别名更改为包装 Switch-Process 的函数。 利用该函数,将参数传递给可能错误地绑定到 WithCommand 参数的本机命令。

此 cmdlet 仅适用于非 Windows 系统。

示例

示例 1 - 执行依赖于“exec”的命令

此示例假定 PowerShell 是非 Windows 系统上的默认 shell。 ssh-copy-id 是一种常用的 bash 脚本,用于在目标计算机上部署公钥,以便进行基于密钥的身份验证。 此脚本依赖于 bash 命令 exec

ssh-copy-id user@host

启用了 PSExec 功能时,ssh-copy-id 脚本成功。

参数

-WithCommand

指定要运行的原生可执行文件(和任何参数)。 作为参数传递的所有附加值都作为要用第一个命令执行的字符串数组传递。

目标命令必须是一个原生可执行文件,不能是 PowerShell 命令。

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

输入

String[]

输出

Object

备注

创建 Switch-Process cmdlet 是为了提供与其他 POSIX shell 的 exec 兼容性。 一般情况下,不会在 PowerShell 脚本中使用此 cmdlet。 Switch-Process 没有与 POSIX shell 中的内置 exec 函数对等的功能(例如文件描述符的处理方式),但应当涵盖大多数情况。