funkcje w powershell to bardzo dziwny i nieintuicyjny wynalazek. należy więc intuicję zmienić, a to oznacza – zrozumieć jak ten diabeł działa. pełny art w wer. angielskiej polecam przeczytać, ponieważ to w pełni wyjaśnia problem. ja przedstawię go po swojemu – czyli w skrócie i na przykładach q:

weźmy prostą funkcję testową:

function fun {
 param ($str)
 echo "będe liczył"
 $str+="aaaa"
 return $str
}
$a="coś"
$a+=fun("!!!")
echo $a

znając trochę języki programowania można się spodziewać, że na ekranie pojawi się:

będę liczył

coś!!!aaaa

tymczasem realny output będzie zaskaqjący:

cośbęde liczył!!!aaaa

o co cho? cała funkcja konwertowana jest w locie na obiekt. wszystko, co ‘wychodzi’ z funkcji traktowane jest jako atrybut obiektu. w związq z tym:

  • return nie jest potrzebny – kończy wykonanie funkcji, ale zwykły output wystarczy
  • każdy output jest jednym z atrybutów obiektu zwracanego przez funkcję

przy tej samej funkcji można zrobić inne doświadczenie:

$a=fun("!!!")
$a
$a.length
$a[1]

które pokaże, że zwracana jest dwuelementowa tablica zawierająca “będę liczył” oraz “!!!aaaa”.

funkcja w najprostszej postaci może wyglądać zatem tak:

function fun {
 param ($str)
 "aaaa"+$str
}

jeśli zatem w funkcji wykorzystywana jest jakaś funkcja zwracająca cokolwiek na ekran, niezbędne jest dodanie “|out-null” żeby nie otrzymać tego jako atrybut w zwracanym obiekcie.

eN.

Spread the love

Zostaw komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Time limit is exhausted. Please reload CAPTCHA.