.NET Разработчик
6.7K subscribers
475 photos
4 videos
14 files
2.37K links
Дневник сертифицированного .NET разработчика. Заметки, советы, новости из мира .NET и C#.

Для связи: @SBenzenko

Поддержать канал:
- https://boosty.to/netdeveloperdiary
- https://patreon.com/user?u=52551826
- https://pay.cloudtips.ru/p/70df3b3b
Download Telegram
День 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👎3
День 2685. #ЗаметкиНаПолях #PowerShell
Атрибуты Валидации Параметров в
PowerShell. Окончание
Начало

ValidateNotNull
Проверяет, что параметр не null.
function Process-Data {
param(
[ValidateNotNull()]
[object]$Data
)
Write-Host "Обработка данных: $Data"
}

Process-Data -Data 'some data' #
Process-Data -Data $null #


ValidateNotNullOrEmpty
Проверяет, что строка или коллекция не null и не пустая.
function Write-Log {
param(
[ValidateNotNullOrEmpty()]
[string]$Message
)
Write-Host "Log: $Message"
}

Write-Log -Message 'Important event' #
Write-Log -Message '' #
Write-Log -Message $null #


ValidateNotNullOrWhiteSpace
Аналогично предыдущему, проверяет, что строка не null, не пустая и не пробел.

ValidateDrive
Проверяет, что путь использует один из указанных дисков.
function Get-FileInfo {
param(
[ValidateDrive('C', 'D', 'Temp')]
[string]$Path
)
Write-Host "Получаем данные для: $Path"
}

Get-FileInfo -Path 'C:\Windows\System32' #
# если диск Temp существует
Get-FileInfo -Path 'Temp:\file.txt' #
Get-FileInfo -Path 'Z:\file.txt' #


ValidateUserDrive
Проверяет, что путь использует диск, созданный пользователем в PowerShell (а не встроенные C:, D:, и т.п.).
New-PSDrive -Name 'MyDrive' -PSProvider FileSystem -Root 'C:\MyFolder'

function Read-UserFile {
param(
[ValidateDrive()]
[ValidateUserDrive()]
[string]$Path
)
Get-Content -Path $Path
}

Read-UserFile -Path 'MyDrive:\file.txt' #
Read-UserFile -Path 'C:\file.txt' #


ValidateTrustedData
С версии 6.1.1+ проверяет, что данные происходят из надёжного источника.
function Invoke-TrustedCommand {
param(
[ValidateTrustedData()]
[string]$Command
)
Invoke-Expression $Command
}

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

Комбинирование нескольких атрибутов
К одному параметру можно применить несколько атрибутов проверки:

function Set-Configuration {
param(
[ValidateNotNullOrEmpty()]
[ValidateLength(3, 50)]
[ValidatePattern('^[a-zA-Z0-9_-]+$')]
[string]$ConfigName
)
Write-Host "Установка конфигурации: $ConfigName"
}

Set-Configuration -ConfigName 'my-config_123' #
Set-Configuration -ConfigName 'ab' #
Set-Configuration -ConfigName 'invalid@name' #

Все атрибуты валидации проверяются в порядке появления. Если любая из валидаций завершается неудачей, ошибка выбрасывается немедленно.

Источник: https://www.meziantou.net/powershell-parameter-validation-attributes.htm
👍3👎3