我无法让--%
参数按预期工作。我的$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
我使用--%
参数错了吗?任何帮助或指示表示赞赏。感谢
答案 0 :(得分:4)
停止解析符号--%
仅在直接调用可执行文件或使用调用操作符&
时才有效;调用PowerShell脚本/函数/ cmdlet时不能使用它。
答案 1 :(得分:3)
如果你真的想使用Start-Process
,你可以对参数进行编码,并按原样运行。在提升过去的UAC时,我会使用类似的东西:
$Code = ". '$ScriptLocation' $TaskParams"
$Encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($code))
Start-Process PowerShell.exe -ArgumentList "-EncodedCommand",$Encoded -Wait -PassThru
我相当肯定会完成你想要的东西。
答案 2 :(得分: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