Parametry, walidacja i [CmdletBinding()]
Skrypty probe'owe ZEUS przyjmują parametry — forest do przeskanowania, tryb
-AsJson, poświadczenia. Dobrze zdefiniowane, walidowane parametry to różnica
między solidnym narzędziem a kruchym skryptem. Kluczem jest [CmdletBinding()].
Blok param i typowanie
Parametry deklarujemy w bloku param(), zawsze z typem.
function Get-LsnInventory {
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string]$Forest,
[int]$PageSize = 1000,
[switch]$AsJson
)
# ...
}
Standard ProfessNet: każda funkcja probe ma
[CmdletBinding()], każdy parametr ma jawny typ. Tryb maszynowy włącza[switch]$AsJson— domyślnie wyjście jest dla człowieka, z flagą — JSON na stdout.
Co daje [CmdletBinding()]
Ta jedna linijka zamienia zwykłą funkcję w funkcję zaawansowaną: dostajesz
za darmo -Verbose, -Debug, -ErrorAction i automatyczną zmienną $PSCmdlet.
function Get-LsnForest {
[CmdletBinding()]
param([Parameter(Mandatory)][string]$Forest)
Write-Verbose "Łączenie z forestem $Forest" # widoczne tylko z -Verbose
# ...
}
Get-LsnForest -Forest corp.local -Verbose
Atrybuty walidacji
Zamiast ręcznych if-ów walidujemy parametry deklaratywnie. Błędne wejście jest
odrzucane, zanim funkcja się wykona.
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string]$Forest,
[ValidateRange(1, 5000)]
[int]$PageSize = 1000,
[ValidateSet("Forest", "Inventory", "Perf")]
[string]$Mode = "Inventory",
[ValidatePattern('^[a-z0-9.\-]+$')]
[string]$Domain
)
| Atrybut | Sprawdza |
|---|---|
[ValidateNotNullOrEmpty()] | wartość niepusta |
[ValidateRange(min,max)] | liczba w zakresie |
[ValidateSet(...)] | jedna z dozwolonych wartości |
[ValidatePattern(regex)] | zgodność z wzorcem |
[ValidateScript({...})] | dowolny warunek logiczny |
Standard ProfessNet: walidujemy deklaratywnie atrybutami, nie
if-ami w ciele funkcji. To krótszy kod i lepsze komunikaty błędów dla wywołującego.
Parametry z pipeline
Funkcje przyjmujące dane z pipeline oznaczamy ValueFromPipeline i przetwarzamy
w bloku process.
function Test-LsnHost {
[CmdletBinding()]
param(
[Parameter(Mandatory, ValueFromPipeline)]
[string]$ComputerName
)
process {
[pscustomobject]@{
Host = $ComputerName
Online = Test-Connection $ComputerName -Count 1 -Quiet
}
}
}
"dc01", "dc02" | Test-LsnHost
Wskazówka: trzy bloki funkcji zaawansowanej to
begin(setup raz),process(na każdy element pipeline) iend(sprzątanie). Logikę pojedynczego elementu wkładaj doprocess.
[CmdletBinding()] plus typowane, walidowane parametry zamieniają skrypt w
prawdziwe narzędzie z -Verbose, automatyczną walidacją i obsługą pipeline.
To standardowy szkielet każdej funkcji probe w ZEUS.