Nedávno jsem narazil na „záhadu“. Schválně jestli jí přijdete na kloub. 😊 Bude to jednoduchá funkce s jedním řádkem v těle, takže se nebojte.
Nejdřív první příklad:
function ConvertTo-LowerCase {
param (
[string] $InputString
)
return $InputString.ToLower()
}
Write-Output (ConvertTo-LowerCase -InputString “AbCdEfGh”)
Co myslíte, že ten kód vrátí? Správně, „abcdefgh“. Tak, a teď ta slibovaná záhada. Zkusme to s velkými písmeny:
function ConvertTo-UpperCase {
param (
[string] $Input
)
return $Input.ToUpper()
}
Write-Output (ConvertTo-UpperCase -Input “AbCdEfGh”)
Co myslíte, že ten kód vrátí? Koukněte pozorně a přemýšlejte 😊 No a pak chvilku scrollujte pro správnou odpověď.
Jestli jste si mysleli, že kód vrátí „ABCDEFGH“, vězte, že tomu tak není.
Kód nevrátí nic. Vůbec nic. Dokonce i když ten parametr jen vypíšete (bez jakýchkoliv úprav), nevrátí proste NIC. Ani neskončí chybou. Vypadá to, jako kdyby PowerShell vyhodnotil, že něco takového nestojí za zpracování.
A proč? Dávejte si pozor, aby se parametry ve vašich funkcích nejmenovaly Input. Je to automatická proměnná. Detaily zde: https://docs.microsoft.com/en-us/previous-versions//dd347675(v=technet.10)?redirectedfrom=MSDN
Tzn. stačí parametr přejmenovat a už to funguje. On se ten parametr stejně měl jmenovat nějak líp, takže dobře mi tak.

I work for Joyful Craftsmen as a Data Engineer. I like Microsoft technologies (SQL Server, .NET), Azure and lot of other. I also like automating things (and DevOps generally).