【发布时间】:2019-11-07 02:27:00
【问题描述】:
我正在将脚本从 bash 移植到 PowerShell,并且我希望在两者中保持对参数解析的相同支持。在 bash 中,可能的参数之一是 --,我还想在 PowerShell 中检测该参数。但是,到目前为止,我尝试过的任何方法都没有奏效。我不能将它定义为 param($-) 这样的参数,因为这会导致编译错误。另外,如果我决定完全放弃 PowerShell 参数处理,只使用 $args 一切看起来都很好,但是当我运行该函数时,-- 参数丢失了。
Function Test-Function {
Write-Host $args
}
Test-Function -- -args go -here # Prints "-args go -here"
我也知道$PSBoundParameters,但该值不存在,因为我无法绑定名为$- 的参数。这里有没有我可以尝试的其他机制或任何解决方案?
有关更多上下文,请注意我使用 PowerShell 是一个副作用。预计这不会用作普通的PowerShell命令,我也为此编写了一个批处理包装器,但是包装器的逻辑比我想批量编写的要复杂,因此批处理包装器只是调用PowerShell函数,然后执行更复杂的处理。
【问题讨论】:
-
如果您将其称为 ${-params},您可以有一个名为 -params 之类的变量或参数,但是,我仍然不要认为您可以将双连字符参数传递给函数。
-
这可行,但需要修改命令行参数,我想避免这样做。我想我可以检测到
--被传入批处理脚本,然后将其批量转义到`-- -
使用反引号“Test-Function `-- -args go -here”对我有用
-
因此,虽然此线程中有大量信息,但我最终只是用 C# 编写了一个小包装器,并部署了一个 exe 包装器,而不是复杂的批处理->powershell->myprogram 设置。无论如何,这是一个 xy 问题,但答案仍然很有趣,并且希望将来可以帮助其他人!这样做也绕过了我遇到的其他一些问题,例如如何处理引号字符。
标签: powershell parameter-passing