funkcje są częstym zjawiskiem w PowerShell i aby naprawdę zrozumieć język PowerShell, ważne jest, aby wiedzieć, jak działają funkcje . W tym artykule pokażemy, jak funkcja PowerShell ewoluuje od praktycznie niczego do posiadania parametrów za pomocą atrybutów walidacji.
aby to zademonstrować, zacznijmy od funkcji, która nie może być prostsza.
function Write-Log {
param()
}
Po uruchomieniu wewnątrz sesji PowerShell, ta funkcja zostanie uruchomiona, ale nic nie zrobi, ponieważ nie ma kodu do wykonania. PowerShell po prostu wykonuje samą funkcję i zwraca ją.
aby funkcja faktycznie coś zrobiła, musimy dodać trochę kodu. Kod jest dodawany pomiędzy blokiem param a ostatnim nawiasem klamrowym. Poniżej widać, że moja funkcja Write-Log zwraca ciąg „zrobiłem coś” do konsoli.
function Write-Log {
param()
'I did something'
}
PS> Write-Log
I did something
nasza funkcja nazywa się Write-Log, więc zakładam, że będzie to funkcja, która w końcu napisze jakiś tekst do pliku dziennika. Ponieważ nie chcemy zapisywać tego samego do pliku dziennika za każdym razem, musimy zapewnić jakiś sposób na zmianę wiadomości, gdy funkcja działa. Aby to zrobić, dodamy parametr. Parametry pozwalają użytkownikowi na przekazywanie różnych wartości do funkcji w czasie wykonywania. Pozwala to funkcji zbierać dynamiczne dane wejściowe w czasie wykonywania.
aby dodać parametr, dodam zmienną. W tym przypadku zmienną nazywa się Message. Dodam go wewnątrz bloku param, jak pokazano poniżej. Możesz wtedy zobaczyć, że mogę odwołać się do tego parametru wewnątrz samej funkcji. Po uruchomieniu funkcja zwróci dowolną wartość, którą przekażę do parametru Message.
function Write-Log {
param($Message)
$Message
}
PS> Write-Log -Message 'I did something'
I did something
nie musisz zatrzymywać się na jednym parametrze. Możemy tu dodać tyle,ile chcemy. Poniżej dodaję parametr ważności, dostarczający wartość, gdy funkcja jest uruchomiona i widać, że wykazuje to samo zachowanie.
function Write-Log {
param($Message, $Severity)
"$Message - Severity: $Severity"
}
Write-Log -Message 'I did something' -Severity 1
teraz, gdy wiemy, jak obsługiwać parametry, możemy przejść do typów parametrów. Parametr ma typ tak jak Wszystko inne w PowerShell. Powyżej używał typu, ale akceptował każdy rodzaj obiektu, jaki można sobie wyobrazić. Parametr nie został wyraźnie wpisany. Dobrze jest to zrobić na wszystkich parametrach, aby upewnić się, że przekazywane są tylko wartości, których oczekujesz.
aby zdefiniować typ, możemy dodać typ w nawiasach kwadratowych tuż przed zadeklarowaniem parametru.
function Write-Log {
param($Message)
$Message
}
gdy do parametru zostanie przypisany typ jawny, PowerShell zaakceptuje tylko dane wejściowe tego typu lub obiekt, który może przekonwertować. W poniższym przykładzie przekazuję wartość logiczną $false do parametru Message. Widać, że PowerShell na to nie pozwoli. Dzieje się tak dlatego, że nie może konwertować typu logicznego na typ kontrolera ServiceController.
jednak, jeśli przekażemy obiekt ServiceController, który zwraca Get-Service, działa to dobrze.
PS> Write-Log -Message $service
Status Name DisplayName
------ ---- -----------
Stopped AdtAgent Microsoft Monitoring Agent Audit Fo...
możemy również użyć atrybutów parametrów. Atrybuty parametrów pozwalają na zdefiniowanie różnych cech każdego parametru, które decydują o jego działaniu. W poniższym przykładzie używam parametru obowiązkowego. Te atrybuty zmuszają użytkownika do przekazania wartości do parametru wiadomości, w przeciwnym razie funkcja nie zostanie uruchomiona.
ustawiam również domyślną wartość parametru ważności. Pozwala mi to wymusić na zawsze wartość 1, chyba że zostanie ona nadpisana w czasie wykonywania przez przekazanie wartości do tego parametru.
function Write-Log {
param(
$Message,
$Severity = 1
)
"$Message - Severity: $Severity"
}
wreszcie możemy użyć atrybutów walidacji parametrów. Atrybuty walidacji parametrów są świetnym sposobem na ograniczenie wartości przekazywanych do parametru. W poniższym przykładzie używam atrybutu walidacji ValidateRange (). Atrybut ten jest używany w parametrach typu integer do definiowania zakresu dozwolonych liczb. W tym przykładzie dopuszczam tylko wartości dotkliwości 1-5. Każda inna wartość spoza tego zakresu zawiedzie.
function Write-Log {
param(
$Message,
$Severity
)
"$Message - Severity: $Severity"
}
podsumowanie
do tej pory powinieneś mieć podstawową wiedzę na temat działania funkcji w PowerShell. Omówiliśmy wszystko, co musisz wiedzieć, aby rozpocząć tworzenie przydatnych funkcji w PowerShell. Zachęcam do rozpoczęcia zauważania w skryptach czasów, w których funkcja byłaby przydatna i rozpoczęcia ich budowania. Z czasem zobaczysz, że Twój kod stanie się czystszy i łatwiejszy do odczytania.