1

我无法让--%参数按预期工作。我的$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

我使用的--%参数错误吗?任何帮助或指针表示赞赏。谢谢

4

3 回答 3

4

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

于 2016-09-06T18:16:57.607 回答
3

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

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

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

我相当肯定这会完成你正在寻找的东西。

于 2016-09-06T18:53:01.173 回答
3

您无需启动 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
于 2016-09-06T21:16:03.523 回答