Можно ли разбить командную строку PowerShell на несколько строк?
В Visual Basic я могу использовать подчеркивание (_
) для продолжения команды в следующей строке.
Можно ли разбить командную строку PowerShell на несколько строк?
В Visual Basic я могу использовать подчеркивание (_
) для продолжения команды в следующей строке.
Вы можете использовать пробел с последующим серьезным акцентом (backtick):
Get-ChildItem -Recurse '
-Filter *.jpg '
| Select LastWriteTime
Однако это необходимо только в таких случаях, как показано выше. Обычно вы получаете автоматическое продолжение строки, когда команда не может быть синтаксически завершена в этой точке. Это включает запуск нового элемента конвейера:
Get-ChildItem |
Select Name,Length
будет работать без проблем, так как после |
команда не может быть завершена, поскольку в ней отсутствует другой элемент конвейера. Также открывающиеся фигурные скобки или любые другие скобки позволят непосредственно продолжить строку:
$x=1..5
$x[
0,3
] | % {
"Number: $_"
}
Похож на |
запятая также будет работать в некоторых контекстах:
1,
2
Имейте в виду, однако, что, как и в случае автоматической вставки точек с запятой в JavaScript, есть некоторые вещи, которые аналогично разбиваются, потому что разрыв строки происходит в точке, где ему предшествует допустимое выражение:
return
5
не будет работать.
Наконец, строки (во всех вариантах) также могут выходить за пределы одной строки:
'Foo
bar'
Они включают разрывы строк внутри строки, затем.
Я только что узнал, что не должно быть никакого символа между обратным тиком и разрывом строки. Даже пробел заставит команду не работать.
В большинстве C-подобных языков я преднамеренно размещаю свои фигурные скобки, где, по-моему, они делают код более легким для чтения.
Парсер PowerShell распознает, когда отчет явно не завершен, и смотрит на следующую строку. Например, представьте себе командлет, который принимает необязательный параметр блока script:Get-Foo { ............ }
если блок script очень длинный, вы можете написать:
Get-Foo { ............... ............... ............... }
Но это не сработает: синтаксический анализатор увидит два оператора. Первый - Get-Foo
, а второй - блок script. Вместо этого я пишу:
Get-Foo { ............... ............... ............... }
Я мог бы использовать символ продолжения строки (`), но это делает трудно читаемый код и вызывает ошибки.
Поскольку этот случай требует, чтобы открытая фигурная скобка находилась на предыдущей строке, я следую этому шаблону повсюду:
if (condition) { ..... }
Обратите внимание, что в операторах
if
требуется блок script в грамматике языка, поэтому анализатор будет выглядеть в следующей строке для блока script, но для согласованности я сохраняю открытую фигурку в той же строке.
Иначе, в случае длинных конвейеров, я прерываю символ трубы (|
):
$project.Items | ? { $_.Key -eq "ProjectFile" } | % { $_.Value } | % { $_.EvaluatedInclude } | % { ......... }
Чтобы расширить на cristobalito ответ:
Я предполагаю, что вы говорите о командной строке - если это в сценарии, то новая строка> действует как разделитель команд.
В командной строке используйте точку с запятой ';'
Например:
Подпишите сценарий PowerShell в командной строке. Без разрывов строк.
powershell -Command "&{$cert=Get-ChildItem –Path cert:\CurrentUser\my -codeSigningCert ; Set-AuthenticodeSignature -filepath Z:\test.ps1 -Cert $cert}
В PowerShell и PowerShell ISE также можно использовать Shift + Enter в конце каждой строки для многострочного редактирования (вместо стандартного обратного удара '
).
Если вы пытаетесь разделить строки на несколько строк, вы можете использовать "+". Например:
$header = "Make," +
"ComputerName," +
"Model," +
"Windows Version"
Будет выглядеть так:
$header = "Make,ComputerName,Model,Windows Version"
Я предполагаю, что вы говорите в командной строке - если это в script, то новая строка действует как разделитель команд.
В командной строке используйте запятую ';'
;
отделить команду\\
на любую обратную косую черту \
."'
для передачи безопасного адреса для переключения команды, например "ПУТЬ".Эта команда ps1 устанавливает языковой сертификат pfx.
powershell -Command "$pfxPassword = ConvertTo-SecureString -String "12345678" -Force -AsPlainText ; Import-PfxCertificate -FilePath "'C:\\\Program Files\\\VpnManagement\\\resources\\\assets\\\cert\\\localhost.pfx'" Cert:\\\LocalMachine\\\My -Password $pfxPassword ; Import-PfxCertificate -FilePath "'C:\\\Program Files\\\VpnManagement\\\resources\\\assets\\\cert\\\localhost.pfx'" Cert:\\\LocalMachine\\\Root -Password $pfxPassword"