Введение
Это руководство предлагает полный свод правил по стилю PowerShell, с акцентом на читаемость, последовательность и лучшие практики для написания чистых и легко сопровождаемых скриптов. Руководство основано на PowerShell Practice and Style Guide.
Оформление и форматирование кода
Соблюдайте единый стиль
Используйте единообразную структуру отступов, длину строк и правила написания с заглавной буквы для улучшения читаемости.
Правила написания с заглавной буквы
- Используйте PascalCase для всех публичных идентификаторов.
- Используйте lowercase для ключевых слов языка.
- Используйте UPPERCASE для ключевых слов в комментариях справки.
function Write-Host {
[CmdletBinding()]
param(
[psobject]$Object,
[switch]$NoNewline
)
}
Стиль скобок (One True Brace Style — OTBS)
Открывающая скобка на конце строки, закрывающая — на новой строке.
if ($value -gt 0) {
"Positive"
} else {
"Non-Positive"
}
CmdletBinding и порядок блоков
Начинайте функции с [CmdletBinding()]
и соблюдайте порядок param()
, begin
, process
, end
.
[CmdletBinding()]
param ()
process { }
end { }
Отступы
Используйте четыре пробела для каждого уровня вложенности.
foreach ($item in $list) {
Do-Something -Param $item
}
Максимальная длина строки
Ограничьте строки 115 символами. Используйте splatting или скобки для переноса строк.
$Params = @{
Name = "Explorer"
Verbose = $true
}
Get-Process @Params
Пустые строки и пробелы
- Окружайте функции двумя пустыми строками.
- Не допускайте пробелов в конце строк.
- Используйте пробелы вокруг операторов и параметров.
$Value = 5 + 3
Избегайте точек с запятой
Не используйте точку с запятой в конце строк.
$Options = @{
Margin = 2
Padding = 2
}
Функции
Базовые функции
- Избегайте
return
. Выводите объекты напрямую. - Оставляйте пробел между именем функции и параметрами.
function MyFunction ($param1, $param2) {
...
}
Расширенные функции
- Используйте формат имени
<Глагол>-<Существительное>
. - Всегда применяйте
[CmdletBinding()]
. - Возвращайте объекты в блоке
process {}
. - Указывайте
OutputType
.
function Get-Example {
[CmdletBinding()]
[OutputType([psobject])]
param (
[int]$Id
)
process {
New-Object -TypeName psobject -Property @{ ID = $Id }
}
}
Документирование и комментарии
Основные правила комментариев
- Держите комментарии в актуальном состоянии.
- Пишите на английском языке полными предложениями при необходимости.
- Объясняйте логику и решения, а не очевидные действия кода.
# Корректировка отступа из-за наложения интерфейса
$Margin = $Margin + 2
Блочные комментарии
Используйте #
или <# ... #>
для длинных комментариев.
<#
.SYNOPSIS
Пример блочного комментария.
#>
Встроенные комментарии
Выровняйте комментарии для лучшей читаемости.
$Options = @{
Margin = 2 # Корректировка интерфейса
Padding = 2 # Отступ вокруг текста
}
Комментарии-справка
Всегда добавляйте справку к вашим скриптам.
function Get-Example {
<#
.SYNOPSIS
Получение примерных данных.
.EXAMPLE
Get-Example
#>
}
Читаемость
Используйте отступы
Корректно оформляйте вложенные конструкции.
foreach ($item in $items) {
Process-Item $item
}
Избегайте обратных кавычек
Используйте splatting вместо обратной кавычки для переноса строк.
$Params = @{
Class = "Win32_LogicalDisk"
Filter = "DriveType=3"
}
Get-WmiObject @Params
Конвенции именования
Используйте полные имена команд и параметров
Избегайте алиасов и сокращений.
Get-Process -Name Explorer
Используйте явные пути
Предпочитайте полные пути или переменную $PSScriptRoot
.
Get-Content "$PSScriptRoot\README.md"
Избегайте использования ~
Используйте ${Env:UserProfile}
вместо ~
.
cd ${Env:UserProfile}
Заключение
Следование этим рекомендациям обеспечит чистоту, последовательность и легкость сопровождения ваших PowerShell-скриптов, особенно при работе в команде.
Подробнее смотрите в PowerShell Practice and Style Guide.