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 命令。
类型: | String[] |
Position: | 0 |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
输入
String[]
输出
备注
创建 Switch-Process
cmdlet 是为了提供与其他 POSIX shell 的 exec
兼容性。 一般情况下,不会在 PowerShell 脚本中使用此 cmdlet。 Switch-Process
没有与 POSIX shell 中的内置 exec
函数对等的功能(例如文件描述符的处理方式),但应当涵盖大多数情况。