TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #3215 1.69K
День 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
  • 👍 4
  • 👎 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 →