Как ввести многострочную команду



можно ли разделить командную строку PowerShell на несколько строк?



в Visual Basic я могу использовать подчеркивание (_) для продолжения команды на следующей строке.

1926   7  

7 ответов:

вы можете использовать серьезный акцент (или 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 распознает, когда оператор явно не завершен, и смотрит на следующую строку. Например, представьте себе командлет, который принимает необязательный параметр блока сценария:

    Get-Foo { ............ }

если блок скрипта очень длинный, вы можете написать:

    Get-Foo
    {
        ...............
        ...............
        ...............
    }

но это не сработает: парсер увидит два оператора. Первый это Get-Foo и второй блок скрипта. Вместо этого я пишу:

    Get-Foo {
        ...............
        ...............
        ...............
    }

я мог бы использовать символ продолжения строки ( ` ), но это делает код трудночитаемым и приглашает ошибки.

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

    if (condition) {
        .....
    }

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

Simlarly, в случае длинных трубопроводов, я ломаюсь после символа трубы (|):

    $project.Items | 
        ? { $_.Key -eq "ProjectFile" } | 
        % { $_.Value } | 
        % { $_.EvaluatedInclude } |
        % {
            .........
        }

чтобы расширить на кристобалито ответ:

Я предполагаю, что вы говорите о командной строке-если это в скрипте, то новая строка >действует как разделитель команд.

в командной строке, используйте точку с запятой ';'

Например:

подписать 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"

Comments

    Ничего не найдено.