Pchełki Powershell: parametry wejściowe

Dzisiejsza pchełka będzie, jak na pchełkę przystało, króciutka, dotknie jednak bardzo ważkiego zagadnienia: parametryzowania naszego skryptu.

Założenie jest takie, że piszemy skrypt w PS, który operuje na zadanym pliku, a następnie wyniki tej operacji zapisuje w jakimś folderze. Szczegóły (a więc doprecyzowanie co owo „operuje” dokładnie oznacza) są dla dzisiejszej pchełki nieistotne – ważne jest natomiast, żeby zweryfikować na samym początku skryptu, czy podano wszystkie wymagane parametry wejściowe.

W tym celu posłużymy się poleceniem CmdletBinding(), które umożliwia wymuszenie parametrów wejściowych (z wiersza poleceń), weryfikację ich typów danych oraz automatyczne przypisanie ich do lokalnych zmiennych.

Przykład:

[CmdletBinding()] Param ( Parameter (Mandatory=True)] [string] $InputFile)

Powyższa linia, umieszczona na samym początku skryptu, daje nam następujące korzyści:

– Związuje pierwszy parametr przekazany skryptowi w wierszu poleceń ze zmienną lokalną $InputFile, typu string
– Wymusza użycie tego parametru („Mandatory=True”) – a więc jeżeli użytkownik spróbuje wykonać skrypt bez parametru, PS zwróci komunikat błędu i skrypt nie wykona się

W przypadku opisanego przeze mnie scenariusza, nasz skrypt będzie wymagał dwóch parametrów: pliku wejściowego oraz folderu, gdzie chcemy zapisać wyniki. W takim razie musimy zdefiniować obydwa te parametry:

[CmdletBinding()] Param (
Parameter (Mandatory=True)] [string] $InputFile,
Parameter (Mandatory=True)] [string] $OutputFolder
)

Jak widać na powyższym przykładzie, definicje poszczególnych parametrów należy rozdzielić przecinkami.

A co, jeżeli chcemy dać użytkownikowi możłiwość podania trzeciego, nieobowiązkowego parametru? Dajmy na to, piszemy symulator dla Działu Pozyskiwania Stolca i chcemy przekazać skryptowi parametr oznaczający ilość rolek papieru toaletowego, przy czym jeżeli parametr ten zostanie pominięty, chcemy przekazać wartość domyślną równą pięć.

Oto jak to zrobić:

[CmdletBinding()] Param (
Parameter (Mandatory=True)] [string] $InputFile,
Parameter (Mandatory=True)] [string] $OutputFolder,
Parameter ()] [int] $NoOfRolls = 5
)

W tym przykładzie dodaliśmy do listy parametrów trzeci, opcjonalny parametr o nazwie NoOfRolls, którego wartość ustalamy na pięć, o ile użytkownik nie zażyczy sobie inaczej.

Wywołanie naszego skryptu może teraz wyglądać tak:

C:\>powershell mojskrypt.ps1 ‚c:\pliki\wejsciowe\jakisplik.txt’ c:\pliki\wynikowe’

W powyższym przypadku przekazaliśmy skryptowi plik wejściowy ‚jakisplik.txt’ oraz przykazaliśmy zapisać wyniki do folderu ‚wynikowe’, przy czym ilość rolek papieru zostanie ustalona na pięć.

Można też tak:

C:\>powershell mojskrypt.ps1 ‚c:\pliki\wejsciowe\jakisplik.txt’ c:\pliki\wynikowe’ 8

Tutaj zwiększamy ilość rolek do ośmiu.

A co, jeżeli spróbujemy dodać kolejny parametr opcjonalny, dajmy na to udźwig muszli, w kilogramach?

Proszę bardzo:

[CmdletBinding()] Param (
Parameter (Mandatory=True)] [string] $InputFile,
Parameter (Mandatory=True)] [string] $OutputFolder,
Parameter ()] [int] $NoOfRolls = 5,
Parameter ()] [int] $BowlCapacity = 150
)

Tutaj umożliwiamy użytkownikowi podanie nie tylko ilości rolek srajtaśmy, ale również maksymalnego udźwigu muszli klozetowej – przy czym pominięcie tego parametru spowoduje przyjęcie wartości domyślnej 150 kg.

No i tu zaczynają się kłopoty. A co, jeżeli użytkownik zechce podać inny udźwig muszli, ale bez podawania ilości rolek? W jaki sposób PS rozpozna, o który parametr chodzi?

Tu w sukurs przychodzi alternatywna składnia wywoływania parametrów skryptu, a mianowicie Named Parameters, czylio po naszemu Parametry Nazwane. Czyli nic innego jak jawne przekazanie nazw parametrów w wierszu poleceń, o, tak:

C:\>powershell mojskrypt.ps1 -InputFile ‚c:\pliki\wejsciowe\jakisplik.txt’ -OutputFolder c:\pliki\wynikowe’ -BowlCapacity ‚250’

W powyższym wywołaniu przekazujemy do skryptu trzy parametry: dwa pierwsze obowiązkowe, bez zmian, oraz czwarty (pomijamy trzeci, który w związku z tym przybierze wartość domyślną 5).

Innym zagadnieniem jest bardziej szczegółowa weryfikacja danych wejściowych, czyli na przykład sprawdzenie, czy plik istnieje, albo czy nie podano pliku zamiast folderu i tak dalej. Ale o tym napiszę – być może – innym razem.

Autor: xpil

Po czterdziestce. Żonaty. Dzieciaty. Komputerowiec. Krwiodawca. Emigrant. Rusofil. Lemofil. Sarkastyczny. Uparty. Mól książkowy. Ateista. Apolityczny. Nie oglądam TV. Uwielbiam matematykę. Walę prosto z mostu. Gram na paru instrumentach. Lubię planszówki. Słucham bluesa, poezji śpiewanej i kapel a’capella. || Kliknij tutaj po więcej szczegółów ||

Dodaj komentarz

3 komentarzy do "Pchełki Powershell: parametry wejściowe"

Powiadom o
avatar
Sortuj wg:   najnowszy | najstarszy | oceniany
Jaro
Gość

Czy to normalne, że gdy pracujesz dla korporacji to czujesz się jak przeciągnięty przez wyżymaczkę a na dodatek masz wyrzuty sumienia, że mało pracujesz?

wpDiscuz