о_Комментариях
Краткое описание
Описывает использование комментариев PowerShell и содержит специальные варианты использования.
Длинное описание
Вы можете записывать комментарии в заметки или структурировать код PowerShell, чтобы помочь с удобочитаемостью. При запуске кода текст примечаний игнорируется PowerShell.
Примечания предоставляют важный контекст для читателей кода. Примечания следует использовать для следующих целей:
- Объяснить сложный код проще
- Объясните, почему был выбран конкретный подход
- Граничные случаи документа, которые следует учитывать
- Предоставление ссылок на вспомогательный справочный материал
Некоторые комментарии имеют особое значение в PowerShell. См. специальные комментарии.
Стили комментариев PowerShell
PowerShell поддерживает два стиля комментариев:
однострочные комментарии начинаются с хэш-символов (
#
) и заканчиваются новой строкой.#
может предшествовать тексту, который не является частью комментария, включая пробелы. Однострочные комментарии, размещенные в той же строке, что и непрокомментированный исходный код, называются конечными комментариями строки.Блочные комментарии начинаются с
<#
и заканчиваются#>
. Комментарий блока может охватывать любое количество строк и может быть включен до, после или в середине раскомментированного исходного кода. Весь текст в блоке обрабатывается как часть одного комментария, включая пробелы.Важный
В блоковый комментарий можно включать однострочные комментарии. Однако нельзя вкладывать блочные комментарии. При попытке вложить блочные комментарии, внешний блок заканчивается на первом обнаруженном
#>
.
Примеры
Пример 1. Однострочный комментарий
# This is a single-line comment.
# This is also a single-line comment.
Пример 2. Блокировка комментариев
<#
This is a block comment.
Text within the block is a part of the same comment.
Whitespace is unimportant in a block comment.
#>
Пример 3: Комментарий в конце строки
$var = 4 # This is an end-of-line comment
Пример 4: Встраиваемый блок комментариев
'Foo'; <# This is an inline block comment #> 'Bar'
Пример 5. Полный пример
<#
.DESCRIPTION
Demonstrates PowerShell's different comment styles.
#>
param (
[string] $Param1, # End-of-line comment
<# Inline block comment #> $Param2
)
$var = 1, <# Inline block comment #> 2, 2
# Single-line comment.
# Another single-line comment.
$var.Where(
<# Arg1 note #> { $_ -eq 2 },
<# Arg2 note #> 'First',
<# Arg3 note #> 1
)
Специальные комментарии
PowerShell включает несколько ключевых слов комментариев для поддержки конкретных вариантов использования.
Справка по комментариям
Вы можете написать помощь с комментариями для функций и сценариев, используя однострочные или блочные комментарии. Пользователи могут использовать командлет Get-Help для просмотра справки на основе комментариев для функции или скрипта. PowerShell определяет 15 ключевых слов комментариев, которые можно использовать для предоставления сведений, таких как описание и пример использования.
<#
.DESCRIPTION
Comment-based help using a block comment.
#>
function Get-Function { }
# .DESCRIPTION
# Comment-based help using multiple single-line comments.
function Get-Function { }
Дополнительные сведения см. в следующем разделе:
#Requires
Оператор #Requires
предотвращает выполнение скрипта, если текущий сеанс PowerShell не соответствует указанным требованиям.
#Requires
может отображаться в любой строке скрипта, но обрабатывается одинаково независимо от позиции.
#Requires -Modules AzureRM.Netcore
#Requires -Version 6.0
param (
[Parameter(Mandatory)]
[string[]] $Path
)
Дополнительные сведения см. в разделе about_Requires.
Блок подписи
Скрипты можно подписать таким образом, чтобы они соответствовали политикам выполнения PowerShell. После подписания блок подписи добавляется в конец скрипта. Этот блок принимает форму нескольких однострочных комментариев, которые считываются PowerShell перед выполнением скрипта.
# SIG # Begin signature block
# ...
# SIG # End signature block
Дополнительные сведения см. в about_signing.
шебанг
В Unix-подобных системах shebang (#!
) — это директива, используемая в начале скрипта, чтобы указать, какую командную оболочку следует использовать для запуска скрипта.
Шебанг не является частью языка PowerShell. PowerShell интерпретирует его как обычный комментарий. Шебанг интерпретируется операционной системой.
В следующем примере она гарантирует, что PowerShell запускает сценарий при вызове скрипта из контекста, отличного от PowerShell.
#!/usr/bin/env pwsh
Write-Host 'Begin script'
Маркеры областей редактора кода
Некоторые редакторы кода поддерживают маркеры регионов, которые позволяют свернуть и развернуть разделы кода. Для PowerShell маркеры региона — это комментарии, начинающиеся с #region
и заканчивающиеся #endregion
. Маркеры региона должны находиться в начале строки. Маркеры регионов поддерживаются в PowerShell ISE и Visual Studio Code с помощью расширения PowerShell. Маркеры региона не являются частью языка PowerShell. PowerShell интерпретирует их как обычные комментарии.
Дополнительные сведения см. в разделе
Комментарии в строковых токенах
#
и <# #>
не имеют специального значения в расширяемой или в дословной строке. PowerShell интерпретирует символы буквально.
PS> '# This is not interpreted as a comment.'
# This is not interpreted as a comment.
PS> "This is <# also not interpreted #> as a comment."
This is <# also not interpreted #> as a comment.
Однако некоторые функции PowerShell предназначены для работы со строками, содержащими примечания. Интерпретация комментария зависит от конкретной функции.
Комментарии регулярных выражений
Регулярные выражения (regex) в PowerShell используют модуль regex .NET, который поддерживает два стиля комментариев:
- Встроенный комментарий (
(?#)
) - Комментарий в конце строки (
#
)
Комментарии regex поддерживаются всеми функциями, основанными на регулярных выражениях в PowerShell. Например:
PS> 'book' -match '(?# This is an inline comment)oo'
True
PS> 'book' -match '(?x)oo# This is an end-of-line comment'
True
PS> $regex = 'oo # This is an end-of-line comment'
PS> 'book' -split $regex, 0, 'IgnorePatternWhitespace'
b
k
Заметка
Для комментариев в конце строки требуется либо конструкция (?x)
, либо параметр IgnorePatternWhitespace
.
Дополнительные сведения см. в следующем разделе:
Комментарии JSON
Начиная с PowerShell 6.0, командлет ConvertFrom-Json поддерживает следующие стили комментариев JSON:
- Однострочный комментарий (
//
) - Блокировать комментарий (
/* */
)
Заметка
Командлет Invoke-RestMethod автоматически десериализует полученные данные JSON. В PowerShell 6.0 комментарии разрешены в данных JSON.
Например:
'{
"Foo": "Bar" // This is a single-line comment
}' | ConvertFrom-Json
Foo
---
Bar
Предупреждение
Начиная с PowerShell 7.4 командлет Test-Json больше не поддерживает JSON с комментариями. Ошибка возвращается, если JSON содержит примечания. В поддерживаемых версиях до 7.4 Test-Json
успешно анализирует JSON с комментариями. В PowerShell 7.5 Test-Json
включает возможность игнорировать комментарии JSON.
Примечания CSV
Import-Csv и ConvertFrom-Csv поддерживают формат расширенного журнала W3C.
Строки, начиная с хэш-символа (#
) рассматриваются как комментарии и игнорируются, если комментарий не начинается с #Fields:
и содержит разделенный список имен столбцов. В этом случае командлет использует эти имена столбцов. Это стандартный формат для служб IIS Windows и других журналов веб-сервера. Дополнительные сведения см. в разделе Расширенный формат файла журнала.
@'
# This is a CSV comment
Col1,Col2
Val1,Val2
'@ | ConvertFrom-Csv
Col1 Col2
---- ----
Val1 Val2
В Windows PowerShell 5.1 export-csv по умолчанию и поведению convertTo-Csv следует включить сведения о типе в виде комментария #TYPE
.
Начиная с PowerShell 6.0, по умолчанию комментарий не включается, но это можно изменить с помощью параметра IncludeTypeInformation.
[pscustomobject] @{ Foo = 'Bar' } | ConvertTo-Csv -IncludeTypeInformation
#TYPE System.Management.Automation.PSCustomObject
"Foo"
"Bar"
Если комментарий #TYPE
включен в данные CSV, Import-Csv
и ConvertFrom-Csv
используют эту информацию для установки свойства pstypenames
десериализированных объектов.
class Test { $Foo = 'Bar' }
$test = [Test]::new()
$var = $test | ConvertTo-Csv -IncludeTypeInformation | ConvertFrom-Csv
$var.pstypenames
Test
CSV:Test
комментарии ConvertFrom-StringData
В строковых данных командлет ConvertFrom-StringData обрабатывает строки, начиная с #
, как комментарии. Дополнительные сведения см. в следующем разделе:
Примечания
Вложенные блочные комментарии не поддерживаются. В следующем примере
Baz
не является частью комментария.<# 'Foo' <# 'Bar' #> 'Baz' #>
<# #>
не имеет специального значения в однострочных комментариях.#
не имеет особого значения в блок-комментарии.Чтобы рассматривать его как комментарий, символ комментария не должен быть частью маркера без комментариев. В следующем примере
#Bar
и<#Bar#>
являются частью маркераFoo...
. Поэтому они не рассматриваются как комментарии.PS> Foo#Bar Foo#Bar: The term 'Foo#Bar' is not recognized as a name [...] PS> Foo<#Bar#> Foo<#Bar#>: The term 'Foo<#Bar#>' is not recognized as a name [...]
PowerShell