Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > Posts > Panebože, já se z toho PowerShellu snad zblázním
prosinec 02
Panebože, já se z toho PowerShellu snad zblázním

Tak v tomhle případě jsem samozřejmě chtěl říct něco úplně jiného, než "zblázním". Kreténi. Bože. Co to zase je za peklo.

Tak dneska k podivnému přetypování hashtable.Keys.

Následující kód je snad jasný. Všechny tři druhy polí jsou IEnumerable. Jak normální pole, tak ArrayList, tak i KeyCollection. Takže to jde přetypovat do ArrayList naprosto v pořádku. PowerShell ty prvky prostě přeskládá. Od toho je to skriptovací jazyk. Používám to tak už roky:

[Collections.ArrayList] $alist = @('ondrej' , 'kamil' , 'jitka' )
$array = @('ondrej' , 'kamil' , 'jitka' )
$hash = @{ 0 = 'ondrej' ; 11 = 'kamil' ; 20 = 'jitka' }


[Collections.ArrayList] $arrayList = $alist
write-host $arrayList.GetType().Name
write-host $arrayList.Count

[Collections.ArrayList] $arrayList = $array
write-host $arrayList.GetType().Name
write-host $arrayList.Count

[Collections.ArrayList] $arrayList = $hash.Keys
write-host $arrayList.GetType().Name
write-host $arrayList.Count

Přetypování proběhne v klidu, výsledek má 3 položky v ArrayListu. Všechno ok.

A teď to stejné, ale do parametru funkce:

function Paneboze ([Collections.ArrayList] $arrayList)
{
  write-host $arrayList.Count
}

Paneboze $hash.Keys
Paneboze $alist
Paneboze $array

Výsledek? Pole a ArrayList se do toho vstupního parametru přetypovaly (přeskládaly) úplně normálně. Stejně jako předtím. Narozdíl od hashtable.Keys. To se tam nepřetypovalo. To se celé zabalilo jako do prvního prvku toho ArrayList.

Kreténi! Ještě že mi Willi dal tu pálku k narozeninám. Až se vrátím domů, někde ji rozmlátím.

Comments

asi takto

Paneboze $($hash.Keys)

jo, PowerShell ma spousty lahudek :(
Slajus on 3.12.2014 13:31

Add Comment

Title


Pole Title nemusíte vyplňovat, doplní se to samo na stejnou hodnotu jako je nadpis článku.

Author *


Pole Author nesmí být stejné jako pole Title! Mám to tu jako ochranu proti spamu. Roboti to nevyplní dobře :-)

Body *


Type number two as digit *


Semhle vyplňte číslici dvě. Předchozí antispemové pole nefunguje úplně dokonale, zdá se, že jsou i spamery, které pochopily, že je občas potřeba vyplnit autora :-)

Email


Emailová adresa, pokud na ni chcete ode mě dostat odpověď. Nikdo jiný než já vaši emailovou adresu neuvidí.

Attachments