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