Мне не удается заставить параметр --%
работать должным образом. Моя переменная $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
Я неправильно использую параметр --%
? Любая помощь или указатели приветствуются. Благодарность
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
Символ остановки анализа --%
работает только при прямом вызове исполняемых файлов или с помощью оператора вызова &
; он не предназначен для использования при вызове сценариев / функций / командлетов PowerShell.
Если вы действительно хотите использовать Start-Process
, вы можете закодировать аргумент и запустить его как таковой. Я использую что-то подобное при повышении уровня UAC:
$Code = ". '$ScriptLocation' $TaskParams"
$Encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($code))
Start-Process PowerShell.exe -ArgumentList "-EncodedCommand",$Encoded -Wait -PassThru
Я почти уверен, что это достигнет того, что вы ищете.
Похожие вопросы
Новые вопросы
powershell
PowerShell - это кроссплатформенная утилита командной строки и сценариев от Microsoft. Используйте этот тег только для вопросов о написании и выполнении сценариев PowerShell. Вопросы программирования, относящиеся к кроссплатформенной версии PowerShell Core (Windows, macOS и Linux), должны быть помечены [powershell-core]. Вопросы о системном администрировании следует задавать в случае сбоя суперпользователя или сервера.