Start-Process 和 Stop Parsing (--%) 参数

Start-Process and the Stop Parsing (--%) parameter

我无法让 --% 参数按预期工作。我的 $TaskParams 变量有字符 '<' ,它被 powershell 解释为重定向,因此需要转义。

但是以下不起作用:

$CreateTask = Start-Process PowerShell.exe "$ScriptLocation --% $TaskParams" -Wait -PassThru

没有 --%,当我手动删除任何 '<' 个字符时,它有效:

$CreateTask = Start-Process PowerShell.exe "$ScriptLocation $TaskParams" -Wait -PassThru

收到错误:

 Start-Process : A positional parameter cannot be found that accepts argument 
'--%'.

注意:我使用的是 PS 5.0

我是不是用错了--%参数?任何帮助或指示表示赞赏。谢谢

停止解析符号--%仅在直接调用可执行文件或使用调用运算符&时有效;它不适用于调用 PowerShell 脚本/函数/cmdlet 时使用。

如果你真的想使用 Start-Process 你可以对参数进行编码,运行 就这样。我在提升过去 UAC 时使用类似的东西:

$Code = ". '$ScriptLocation' $TaskParams"
$Encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($code))

Start-Process PowerShell.exe -ArgumentList "-EncodedCommand",$Encoded -Wait -PassThru

我相当确定这会满足您的要求。

您不需要启动 powershell.exe 的新副本或使用 Start-Process 到 运行 来自另一个脚本的脚本。只需将脚本命令及其参数作为其他脚本中的一行即可。例如,假设您有 script2.ps1:

param(
  [String] $Name
)
Write-Host "Hello, $Name"

现在假设您还有 script1。ps1:

Write-Host "This is script1.ps1"
.\Script2.ps1 -Name "Bill Stewart"
Write-Host "script1.ps1 is finished"

如果你现在 运行 script1.ps1:

PS C:\> .\Script1.ps1
This is script1.ps1
Hello, Bill Stewart
script1.ps1 is finished