Вопрос по powershell, batch-file – Команда PowerShell в несколько строк

9

У меня есть пакетный скрипт, который выглядит следующим образом:

Test.bat

@echo off

:: Starts a PowerShell session that starts a PowerShell process with administrator privileges
powershell -noprofile -command "&{$process = start-process powershell -ArgumentList '-noprofile -noexit -file GetTools.ps1' -verb RunAs -PassThru;$process.WaitForExit();}"

Я хотел бы разделить код внутри & quot; & amp; {...} & quot; на несколько строк для удобства чтения.

это сообщение говорит, что использование конечного обратного удара должно помочь, но когда я пишу:

powershell -noprofile -command "&{`
    $process = start-process powershell -ArgumentList '-noprofile -noexit -file GetTools.ps1' -verb RunAs -PassThru;`
    $process.WaitForExit();`
}"

... то есть я заканчиваю каждую строку конечным обратным тылом, затем получаю следующую ошибку:

Incomplete string token.
At line:1 char:4
+ &{` <<<<
    + CategoryInfo          : ParserError: (`:String) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : IncompleteString

'$process' is not recognized as an internal or external command,
operable program or batch file.
'$process.WaitForExit' is not recognized as an internal or external command,
operable program or batch file.
'}"' is not recognized as an internal or external command,
operable program or batch file.

Что я делаю неправильно?

SOLUTION:

powershell -noprofile -command "&{"^
    "$process = start-process powershell -ArgumentList '-noprofile -noexit -file C:\Dev\Powershell\Sandbox.ps1' -verb RunAs -PassThru;"^
    "$process.WaitForExit();"^
    "}"

Ваш Ответ

2   ответа
1

Попробуйте следующее. Я думаю, что это поможет.

powershell -noprofile -command ""&{^
    $process = start-process powershell -ArgumentList '-noprofile -noexit -file GetTools.ps1' -verb
    RunAs -PassThru;^
    $process.WaitForExit();^
}""
Не могу заставить это работать. Janne Beate Bakeng
6

Вы можете попробовать карету^ чтобы указать, что текущая строка продолжается на следующей:

powershell -noprofile -command "&{"^
 "$process = start-process powershell -ArgumentList '-noprofile -noexit -file GetTools.ps1' -verb RunAs -PassThru;"^
 "$process.WaitForExit();"^
 "}"

Обратите внимание, также ведущий пробел, а также закрытие и открытие" на каждой строке.

Смотрите такжеДлинные команды разделены на несколько строк в пакетном файле Windows Vista (.bat).

Не работает, все равно получена та же ошибка. : / Janne Beate Bakeng
Попробуйте добавить пробел в начале следующих строк.
Теперь это работает ... в верхней части пробела двойные кавычки должны быть закрыты до конца строки и открыты на следующей строке.
Я заставил это работать, у вас почти это было, просто нужно убрать задние кавычки. :) Спасибо! Janne Beate Bakeng
Это приводит к: "Отсутствует закрытие"} & apos; в блоке выписок. В строке: 1 символ: 4 + & amp; {^ & lt; & lt; & lt; & lt; + CategoryInfo: ParserError: (CloseBraceToken: TokenId) [], исключение ParentContainsErrorRecord + FullyQualifiedErrorId: MissingEndCurlyBrace & apos; $ process & apos; не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл. & quot; Janne Beate Bakeng

Похожие вопросы