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.

