В итоге оказалось проще, чем я думал. Я создал пару возможностей ... "read_my_cpt" и "edit_my_cpt". «My_role» имеет разрешения для обеих возможностей. Затем мне просто нужно было изменить тип_возможности для СРТ на «my_cpt» вместо «post»
Вы можете использовать пробел, за которым следует серьезный ударение (обратная кавычка):
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'
Они включают в себя разрывы строк внутри строки.
$scriptBlock = [Scriptblock]::Create(@'
echo 'before'
ipconfig /all
echo 'after'
'@)
Invoke-Command -ComputerName AD01 -ScriptBlock $scriptBlock
В большинстве языков, похожих на C, я намеренно расставляю скобки там, где, по моему мнению, код легче всего читать.
Парсер PowerShell распознает, когда утверждение явно не является полным, и переходит к следующей строке. Например, представьте команду, которая принимает необязательный параметр блока сценария:
Get-Foo { ............ }
Если блок сценария очень длинный, вы можете написать:
Get-Foo { ............... ............... ............... }
Но это не сработает: синтаксический анализатор увидит два утверждения. Первое - Get-Foo
, а второе - блок сценария. Вместо этого я пишу:
Get-Foo { ............... ............... ............... }
Я мог бы использовать символ завершения строки (`), но это делает код трудночитаемым и приводит к ошибкам.
Поскольку в этом случае открытая скобка должна находиться на предыдущей строке, я следую этому шаблону везде:
if (condition) { ..... }
Обратите внимание, что утверждения
if
требуют блока сценария в грамматике языка, поэтому синтаксический анализатор будет искать блок сценария на следующей строке, но для последовательности я оставляю открытую скобку на той же строке.
Аналогично, в случае длинных конвейеров я делаю разрыв после символа трубы (|
):
$project.Items | ? { $_.Key -eq "ProjectFile" } | % { $_.Value } | % { $_.EvaluatedInclude } | % { ......... }
Я предполагаю, что вы говорите о командной строке - если это в скрипте, то новая строка действует как разделитель команд.
В командной строке используйте точку с запятой ';'