Мне не удается заставить параметр --% работать должным образом. Моя переменная $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

Я неправильно использую параметр --%? Любая помощь или указатели приветствуются. Благодарность

1
Eric Furspan 6 Сен 2016 в 21:02

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
3
Bill_Stewart 6 Сен 2016 в 21:16

Символ остановки анализа --% работает только при прямом вызове исполняемых файлов или с помощью оператора вызова &; он не предназначен для использования при вызове сценариев / функций / командлетов PowerShell.

4
briantist 6 Сен 2016 в 18:16

Если вы действительно хотите использовать Start-Process, вы можете закодировать аргумент и запустить его как таковой. Я использую что-то подобное при повышении уровня UAC:

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

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

Я почти уверен, что это достигнет того, что вы ищете.

3
TheMadTechnician 6 Сен 2016 в 18:53