我刚刚问了一个问题,建议的代码对我来说有一些模糊之处。
特别是在这行代码上
powershell.exe -c "Start-Process -Verb RunAs cmd /k, ('%~f0' -replace '[ &]', '^$0')"
我想知道
cmd /k
后面的逗号代表什么。这是什么?它是如何工作的是否有文档链接对此进行解释上一部分的
$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[]>] ...