在Powershell中,逗号是什么意思,在这个代码示例中它是如何工作的



我刚刚问了一个问题,建议的代码对我来说有一些模糊之处。

特别是在这行代码上

powershell.exe -c "Start-Process -Verb RunAs cmd /k, ('%~f0' -replace '[ &]', '^$0')"
  1. 我想知道cmd /k后面的逗号代表什么。这是什么?它是如何工作的是否有文档链接对此进行解释

  2. 上一部分的$0是什么。'^$0')"


嵌入Windows PowerShell CLI(powershell.exe)调用中的Start-Process调用使用位置参数绑定,为简洁起见:

  • cmd作为第一个位置参数,绑定到-FilePath参数,即要启动的可执行文件的名称或路径。

  • /k, (...)作为第二个位置参数,绑定到-ArgumentList参数,该参数接受参数的数组以传递目标可执行文件,其元素用,分隔

Start-Process然后在幕后构建一个命令行,通过用空格连接-FilePath自变量和-ArgumentList数组元素,并启动它

题外话:

  • Start-Process构建命令行的方式实际上已经被破坏,因为没有执行按需引用和转义-有关背景信息,请参阅此答案;然而,在您的具体情况下,问题并没有浮出水面。

  • 为了解决这个bug,通常最好将单个字符串传递给-ArgumentList,该字符串包含要传递的所有参数;然而,在这种情况下,引用会很复杂(您需要一个嵌入的"..."字符串或一个显式的字符串连接表达式),因此选择了用,枚举参数的更简单的解决方案。

  • 有关如何发现给定cmdlet的位置参数,请参阅此答案;简而言之:用-?(Start-Process -?)调用它,并在相关参数集中查找名称包含在[...]中的参数;例如
    Start-Process [-FilePath] <System.String> [[-ArgumentList] <System.String[]>] ...

最新更新