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