这些 PowerShell 核心参数是什么意思?

What do these PowerShell Core Parameters Mean?

在 Windows10 文件资源管理器中,似乎是这台计算机的恢复驱动器(我分配了驱动器盘符 R),我选择了“PowerShell 7”>“以管理员身份打开此处”,然后弹出允许应用程序对此设备进行更改的提示,我将程序位置条目读取为:

"C:\Program Files\PowerShell\pwsh.exe" -NoExit -RemoveWorkingDirectoryTrailingCharacter -WorkingDirectory "R:\!" -Command "$host.UI.RawUI.WindowTitle="PowerShell 7 (x64)"

每个参数和值的含义是什么?

谢谢

PowerShell(核心)7 的 CLI,pwsh,记录在概念about_Pwsh topic (analogously, Windows PowerShell's CLI, powershell.exe - a subset of the former - is documented in about_PowerShell.exe).

链接的帮助解释了-NoExit(保持session打开)、-WorkingDirectory(启动工作目录)和-Command(要执行的命令)的含义在启动时,设置控制台 window 的标题)。

但是,一个没有记录的参数是
-RemoveWorkingDirectoryTrailingCharacter,其唯一目的是 解决语法问题
:

  • 在文件资源管理器/桌面 shortcut-menu 定义(通过注册表定义)中,手头的文件夹表示为 %V,它由 Windows (GUI) Shell 调用该文件夹的完整路径。

  • 虽然给定驱动器的根文件夹以外的文件夹表示为 没有 尾随 \(例如,c:\foo) , root 必要的文件夹 do\ 结尾,例如 C:\

  • 由于 shortcut-menu 定义将 %V 包含在 "..." 中,因此 PowerShell CLI 可以正确识别文件夹路径,即使它们包含 嵌入空格 当传递给 -WorkingDirectory (-wd) 时,扩展参数如 "C:\" 会破坏调用语法,因为尾随的 \" 被解释为 转义序列 ,即转义的 " 字符。而不是逐字逐句 \ 后跟(句法)结束 ".

解决方法是在辅助虚拟字符 - ! - 在%V之后,在关闭 ",这避免了语法问题 - 但也 保留了 虚拟字符。

因此,未记录的 -RemoveWorkingDirectoryTrailingCharacter 开关指示 CLI 简单地删除最后一个字符 - aux。虚拟字符 - 来自收到的 -WorkingDirectory 参数,产生原始参数。


正如您通过 this comment on GitHub 发现的那样,对命令行进行 简单调整就足以消除对 -RemoveWorkingDirectoryTrailingCharacter 的需要:

  • "%V"更改为"%V\."

虽然对于根文件夹这会扩展为类似 "C:\." 的内容,但加倍的 \ 是良性的(如果您传递的是 文字 root-folder 路径,"C:\" 就足够了;额外的 \ 然后用于 转义 结束 ").