这些 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:\"
就足够了;额外的 \
然后用于 转义 结束 "
).
在 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:\"
就足够了;额外的 \
然后用于 转义 结束 "
).