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

В итоге оказалось проще, чем я думал. Я создал пару возможностей ... "read_my_cpt" и "edit_my_cpt". «My_role» имеет разрешения для обеих возможностей. Затем мне просто нужно было изменить тип_возможности для СРТ на «my_cpt» вместо «post»

377
задан Peter Mortensen 23 July 2018 в 01:38
поделиться

4 ответа

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

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'

Они включают в себя разрывы строк внутри строки.

573
ответ дан 22 November 2019 в 23:57
поделиться
$scriptBlock = [Scriptblock]::Create(@'
  echo 'before'
  ipconfig /all
  echo 'after'
'@)

Invoke-Command -ComputerName AD01 -ScriptBlock $scriptBlock

источник
не используют одинарную левую кавычку

0
ответ дан 22 November 2019 в 23:57
поделиться

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

Парсер PowerShell распознает, когда утверждение явно не является полным, и переходит к следующей строке. Например, представьте команду, которая принимает необязательный параметр блока сценария:

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

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

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

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

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

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

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

    if (condition) {
        .....
    }

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

Аналогично, в случае длинных конвейеров я делаю разрыв после символа трубы (|):

    $project.Items | 
        ? { $_.Key -eq "ProjectFile" } | 
        % { $_.Value } | 
        % { $_.EvaluatedInclude } |
        % {
            .........
        }
36
ответ дан 22 November 2019 в 23:57
поделиться

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

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

2
ответ дан 22 November 2019 в 23:57
поделиться
Другие вопросы по тегам:

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