Domyślne parametry mają pewne ograniczenia m.in.:
- nie mogą posiadać modyfikatora ref, out, czy params
- muszą być stałymi w czasie kompilacji
- nie mogą być metodami, właściwościami ani wyrażeniem
- domyślne parametry muszą być definiowane po wymaganych parametrach w metodzie
Co mi się bardzo podoba w PowerShellu to możliwość wywoływania polecenia razem z domyślnymi wartości ( mogą to być bloki skryptów).
PS jest dużo bardziej elastyczny językiem programowania i możemy wprowadzić wymóg wprowadzenia parametru user oraz podania hasła, które na ekranie będzie 'ukryte' :)
function Do-SomeThing { param( [string] $computerName = $env:computerName, [string] $user = $(throw "Argument user is not set"), [string] $passwd = $(Get-Password) ) Write-Host "user:$user passwd:$passwd on computer:$computerName" }
Przy wywołaniu prostego polecenia dostajemy błąd:
PS>Do-SomeThing Argument user is not set
Kiedy wywołamy polecenie z użytkownikiem to dostajemy okienko z możliwością wpisania hasła
Możesz wywołać funkcję z hasłem i nazwą komputera:
Do-SomeThing -user "Arek" -passwd "Abc" -computerName "MyPc"
No i jeszcze funkcja do pobierania hasła:
function Get-Password { $securePass = Read-Host "Enter Password" -AsSecureString $bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securePass) $pass = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr) [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr) return $pass }Oczywiście w niektórych przypadkach można użyć Parameter(Mandatory) oraz walidatorów (ValidateScript), ale chciałem Ci przedstawić co można zrobić z domyślnymi parametrami.
Brak komentarzy:
Prześlij komentarz