Вы можете попробовать следующее:
Start-Process -Verb RunAs -Wait -FilePath powershell.exe -ArgumentList '-Command',
"$($ScriptBlock -replace '"', '\"'); bar $port"
В качестве отступления:
* Регулярное выражение, которое вы используете для сопоставления с номером порта, предполагает, что это без кавычек значение атрибута, которое, хотя и допустимо в HTML , не является правильно сформированным XML .
* Не вызывайте вашу функцию с синтаксисом метода (bar($port)
) - Функции PowerShell вызываются как команды оболочки, без скобок и с аргументами, разделенными пробелами, а не ,
: bar $port
Что касается того, что вы пытались:
Start-Process
неизменно интерпретирует аргументы, переданные в -ArgumentList
, как строки , и хотя блок скрипта удобно преобразуется в его содержимое буквальной строки, вам необходимо экранировать встроенный "
персонажикак \"
(sic), чтобы целевой экземпляр PowerShell мог правильно их распознать с помощью опции (подразумеваемой в Windows PowerShell) -Command
.
Поскольку -Command
просто объединяет всеПоследующие аргументы с пробелом в качестве разделителя перед , интерпретирующие результирующую строку как фрагмент исходного кода PowerShell, как правило, для концептуальной ясности предпочтительно передавать одну строку .