Switch-Process

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

语法

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

说明

某些本机 Unix 命令会启动运行某些内容(如 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 命令。

类型:String[]
Position:0
默认值:None
必需:False
接受管道输入:False
接受通配符:False

输入

String[]

输出

Object

备注

创建 Switch-Process cmdlet 以提供 exec 兼容性是其他 POSIX shell。 在正常情况下,cmdlet 不打算在 PowerShell 脚本中使用。 Switch-Process 在 POSIX shell 中没有内置 exec 函数的功能奇偶校验,例如文件描述符的处理方式,但应涵盖大多数情况。