TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #3214 1.65K
День 2684. #ЗаметкиНаПолях #PowerShell
Атрибуты Валидации Параметров в PowerShell. Начало

PowerShell предоставляет набор атрибутов валидации, которые обеспечивают соблюдение ограничений для параметров и переменных. Эти атрибуты проверяют входные данные во время выполнения, делая ваши скрипты более надёжными и уменьшая необходимость в ручной проверке.

Атрибуты валидации могут применяться к:
- Параметрым функций или скриптов,
- Переменным уровня скрипта,
- Свойствам класса.
При сбое валидации PowerShell генерирует исключение с подробным сообщением об ошибке, предотвращая использование недопустимых значений.

ValidateScript
Позволяет определить пользовательскую логику проверки с помощью блока скрипта. Переменная $_ представляет проверяемое значение.
function Test-EvenNumber {
param(
[ValidateScript({ $_ % 2 -eq 0 })]
[int]$Number
)
Write-Host "Valid even number: $Number"
}

Test-EvenNumber -Number 4 #✅
Test-EvenNumber -Number 5 #❌

Также можно применять к переменным:
[ValidateScript({ $_ % 2 -ne 0 })] $oddNumber = 3
$oddNumber = 5 #✅
$oddNumber = 4 #❌

Для более понятных сообщений об ошибке, в PowerShell 6.0+ используется параметр ErrorMessage. Заместитель {0} представляет реальное значение переменной, которая не прошла валидацию:
function Set-EventDate {
param(
[ValidateScript(
{ $_ -ge (Get-Date) },
ErrorMessage = "{0} не является датой в будущем."
)]
[datetime]$EventDate
)
Write-Host "Событие запланировано на $EventDate"
}


ValidateRange
Проверяет, входит ли числовое значение в указанный диапазон.
function Set-Volume {
param(
[ValidateRange(0, 100)]
[int]$Level
)
Write-Host "Громкость $Level%"
}

Set-Volume -Level 50 #✅
Set-Volume -Level 150 #❌


ValidateSet
Ограничивает значение определённым набором вариантов.
function Get-EnvironmentInfo {
param(
[ValidateSet('Development', 'Staging', 'Production')]
[string]$Environment
)
Write-Host "Параметры среды $Environment"
}

Get-EnvironmentInfo -Environment 'Production' #✅
Get-EnvironmentInfo -Environment 'Test' #❌


ValidatePattern
Проверяет значения по регулярному выражению.
function Send-Email {
param(
[ValidatePattern('^[\w\.-]+@[\w\.-]+\.\w+$')]
[string]$EmailAddress
)
Write-Host "Отправка email на $EmailAddress"
}

Send-Email -EmailAddress 'user@example.com' #✅
Send-Email -EmailAddress 'invalid-email' #❌


ValidateLength
Проверяет, попадает ли длина строки в диапазон.
function New-Password {
param(
[ValidateLength(8, 20)]
[string]$Password
)
Write-Host "Длина пароля верная "
}

New-Password -Password 'MyP@ssw0rd' #✅
New-Password -Password 'short' #❌


ValidateCount
Проверяет количество элементов в массиве или коллекции.
function Add-Users {
param(
[ValidateCount(1, 5)]
[string[]]$UserNames
)
Write-Host "Добавление $($UserNames.Count) пользователей"
}

Add-Users -UserNames 'Alice', 'Bob' #✅
Add-Users -UserNames @() #❌ (min 1)
Add-Users -UserNames 1..10 | ForEach-Object {"User$_"} #❌ (max 5)


Окончание следует…

Источник:
https://www.meziantou.net/powershell-parameter-validation-attributes.htm
  • 👍 7
  • 👎 4
More from @netdeveloperdiary
  1. Sep 27, 2026День 2797. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Окончание Начало Продол…
  2. Sep 26, 2026День 2796. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Продолжение Начало Три…
  3. Sep 25, 2026День 2795. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Начало Проблема с позиц…
  4. Sep 24, 2026День 2794. #Оффтоп #Здоровье Сегодня будет необычный пост. Завтра в Москве стартует конфер…
  5. Sep 23, 2026День 2793. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
  6. Sep 22, 2026День 2792. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →