Как ввести многострочную команду
Можно ли разбить командную строку PowerShell на несколько строк?
В Visual Basic я могу использовать подчеркивание (_
) для продолжения команды в следующей строке.
Ответы
Ответ 1
Вы можете использовать пробел с последующим серьезным акцентом (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'
Они включают разрывы строк внутри строки, затем.
Ответ 2
Я только что узнал, что не должно быть никакого символа между обратным тиком и разрывом строки. Даже пробел заставит команду не работать.
Ответ 3
В большинстве 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 } |
% {
.........
}
Ответ 4
Чтобы расширить на cristobalito ответ:
Я предполагаю, что вы говорите о командной строке - если это в сценарии, то новая строка> действует как разделитель команд.
В командной строке используйте точку с запятой ';'
Например:
Подпишите сценарий PowerShell в командной строке. Без разрывов строк.
powershell -Command "&{$cert=Get-ChildItem –Path cert:\CurrentUser\my -codeSigningCert ; Set-AuthenticodeSignature -filepath Z:\test.ps1 -Cert $cert}
Ответ 5
В PowerShell и PowerShell ISE также можно использовать Shift + Enter в конце каждой строки для многострочного редактирования (вместо стандартного обратного удара '
).
Ответ 6
Если вы пытаетесь разделить строки на несколько строк, вы можете использовать "+". Например:
$header = "Make," +
"ComputerName," +
"Model," +
"Windows Version"
Будет выглядеть так:
$header = "Make,ComputerName,Model,Windows Version"
Ответ 7
Я предполагаю, что вы говорите в командной строке - если это в script, то новая строка действует как разделитель команд.
В командной строке используйте запятую ';'
Ответ 8
- Используйте точку с запятой
;
отделить команду - Замените двойную обратную косую черту
\\
на любую обратную косую черту \
. - Используйте
"'
для передачи безопасного адреса для переключения команды, например "ПУТЬ".
Эта команда 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"