Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.

January 31, 2008 / by Zsolt Soczó

Powershell Custom Methods and Properties

Soós Tibi powershellt tanul, ez lelkessé tett engem is. Én ugyan már túl vagyok az alap szintaxon, de a példái kapcsán érdekel, mi történik a háttérben.

Legutóbb ojjektumok properyjét listázgatta, formázgatta. Nyilván .NET programolóként tudjuk, hogy ez a reflection triviális felhasználása, de nem is ez a lényeg belőle. A kérdés akkor vált érdekessé, amikor elkezdte rendeztetni a Hastable-ben levő ojjektumokat ($result). A Hastable egy nagy ojjektumként megy át a csövön, ezért azon nincs mit rendezni. A példa GetEnumerator() hívása ravasz trükk. Ennek hatására a csőbe behullanak a cuccosok mint DictionaryEntry ojjektumok. Ez már egy sima, sik tömb, System.Array. Cool.
Ezt kéne rendeztetni, a Key propery alapján. Tibi viszont Name-et írt, és jól működött. Ez elgondolkodtatott. Miért megy ez jól, mikor nincs is Name-je a DictionaryEntry-nek?

No, hát a címbeli Custom Methods and Property-k miatt. Merthogy, a jámbor rendszergazda a saját szemüvegén keresztül látja a dolgokat, ő nem programoló. Ezért egyes nehezen emészthető fogalmakat, mint Key álnevekkel látnak el. Ezek xml fájlokban vannak, pl. a types.ps1xml-ben van elég sok. Konkrét alanyunk így néz ki:

   <Type>
        <Name>System.Collections.DictionaryEntry</Name>
        <Members>
            <AliasProperty>
                <Name>Name</Name>
                <ReferencedMemberName>Key</ReferencedMemberName>
            </AliasProperty>
        </Members>
    </Type>

Teccik látni, ezért érti a Sort-Object a Key helyett a Name property-t.

(A címbe majdnem bedobtam a Microsoft Powers Hell viccet, de ez már szakállas, nem?)

Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.

LEAVE A COMMENT

1 COMMENTS

  • gerleim February 1, 2008

    (Nem szakállas, én még nem hallottam ;) )