Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a szakasz a parancsmagok írásakor követendő irányelveket ismerteti. Ezek a parancsmagok tervezésére és a parancsmagkód írására vonatkozó irányelvekre vannak elválasztva. Előfordulhat, hogy ezek az irányelvek nem alkalmazhatók minden forgatókönyvre. Ha azonban ezek érvényesek, és Ön nem követi ezeket az irányelveket, előfordulhat, hogy a felhasználók rossz felhasználói élményt tapasztalnak a parancsmagok használatakor.
Tervezési irányelvek
A parancsmagok tervezésekor a következő irányelveket kell követni, hogy egységes felhasználói élményt biztosítson a parancsmagok és más parancsmagok használata között. Ha olyan tervezési útmutatót talál, amely az Ön helyzetére vonatkozik, mindenképpen tekintse meg a kódra vonatkozó irányelveket a hasonló irányelvekhez.
Konkrét főnév használata cmdlet névhez (SD01)
A parancsmagok elnevezéséhez használt főneveknek nagyon specifikusnak kell lenniük, hogy a felhasználó felfedezhesse a parancsmagokat. Az általános főneveket, mint például a "kiszolgáló", lássa el a terméknév rövidített verziójával. Ha például egy főnév egy Microsoft SQL Server-példányt futtató kiszolgálóra hivatkozik, használjon egy főnevet, például az "SQLServer"-t. Az egyes főnevek és a jóváhagyott igék rövid listája lehetővé teszi a felhasználó számára, hogy gyorsan felderítse és előrejelezze a funkciókat, miközben elkerülheti a parancsmagok nevei közötti duplikációt.
A felhasználói élmény fokozása érdekében a parancsmag nevének választott főnévnek egyedinek kell lennie. Használja például a nevet Get-Process ahelyett, hogy Get-Processes. Ezt a szabályt érdemes követni az összes parancsmagnév esetében, még akkor is, ha egy parancsmag valószínűleg több elemet is használ.
Pascal-eset használata parancsmagnevekhez (SD02)
Használja a Pascal-esetet a paraméternevekhez. Más szóval, nagybetűvel kezdje az igék első betűjét és a főnévben használt összes kifejezést. Például: „Clear-ItemProperty”.
Paramétertervezési irányelvek (SD03)
A parancsmagoknak olyan paraméterekre van szükségük, amelyek megkapják azokat az adatokat, amelyeken működnie kell, valamint olyan paraméterekre, amelyek a művelet jellemzőinek meghatározásához használt információkat jelzik. Előfordulhat például, hogy egy Name parancsmag olyan paraméterrel rendelkezik, amely adatokat fogad a folyamatból, és a parancsmag rendelkezhet egy Force paraméterrel, amely azt jelzi, hogy a parancsmag kényszeríthető a művelet végrehajtására. A parancsmagok által definiálható paraméterek száma nincs korlátozva.
Standard paraméternevek használata
A parancsmagnak szabványos paraméterneveket kell használnia, hogy a felhasználó gyorsan megállapíthassa, mit jelent egy adott paraméter. Ha pontosabb névre van szükség, használjon egy szabványos paraméternevet, majd adjon meg egy pontosabb nevet aliasként. A parancsmag például egy olyan paraméterrel rendelkezik, Get-Service amely egy általános névvel (Name) és egy konkrétabb aliassal (ServiceName) rendelkezik. Mindkét kifejezés használható a paraméter megadásához.
A paraméterek nevével és adattípusokkal kapcsolatos további információkért lásd a parancsmag paraméternevének és funkcióinak irányelveit.
Szingular paraméternevek használata
Ne használjon többes számú nevet olyan paraméterekhez, amelyek értéke egyetlen elem. Ide tartoznak azok a paraméterek, amelyek tömböket vagy listákat vesznek fel, mert előfordulhat, hogy a felhasználó csak egy elemet tartalmazó tömböt vagy listát ad meg.
A többes számú paraméter neve csak azokban az esetekben használható, amikor a paraméter értéke mindig többelemes érték. Ezekben az esetekben a parancsmagnak ellenőriznie kell, hogy több elem van-e megadva, és a parancsmagnak figyelmeztetést kell megjelenítenie a felhasználónak, ha több elem nincs megadva.
Pascal-eset használata paraméternevekhez
Használja a Pascal-esetet a paraméternevekhez. Más szóval a paraméternévben szereplő egyes szavak első betűjének nagybetűsítése, beleértve a név első betűét is. A paraméter neve ErrorAction például a helyes nagybetűsítést használja. A következő paraméternevek helytelen nagybetűsítést használnak:
errorActionerroraction
A beállítások listáját tartalmazó paraméterek
Kétféleképpen hozhat létre olyan paramétert, amelynek értéke kiválasztható egy beállításkészletből.
Adjon meg egy enumerálási típust (vagy használjon meglévő számbavételi típust), amely megadja az érvényes értékeket. Ezután az enumerálási típussal hozzon létre egy ilyen típusú paramétert.
Adja hozzá a ValidateSet attribútumot a paraméterdeklarációhoz. Az attribútummal kapcsolatos további információkért lásd: ValidateSet Attribute Deklaráció.
Standard típusok használata paraméterekhez
A többi parancsmaggal való konzisztenciának biztosítása érdekében használjon szabványos típusokat a paraméterekhez, ahol csak lehetséges. A különböző paraméterekhez használandó típusokkal kapcsolatos további információkért tekintse meg a Standard parancsmag paraméternevei és típusai című témakört. Ez a témakör több témakörre mutató hivatkozásokat tartalmaz, amelyek leírják a standard paraméterek csoportjainak nevét és .NET-keretrendszertípusait, például a "tevékenységparamétereket".
.NET-keretrendszertípusok használata Strongly-Typed
A paramétereket .NET-keretrendszertípusokként kell definiálni a jobb paraméterérvényesítés érdekében. Például azokat a paramétereket, amelyek egy értékkészlet egyetlen értékére korlátozódnak, enumerálási típusként kell definiálni. Az egységes erőforrás-azonosító (URI) érték támogatásához adja meg a paramétert System.Uri típusként. Kerülje az egyszerű sztringparamétereket, kivéve a szabad szövegű tulajdonságok esetében.
Konzisztens paramétertípusok használata
Ha ugyanazt a paramétert több parancsmag használja, mindig ugyanazt a paramétertípust használja. Ha például a Process paraméter egy parancsmag System.Int16 típusa, ne állítsa egy Process másik parancsmag paraméterét System.Uint16 típussá.
Igaz és hamis értéket tartalmazó paraméterek
Ha a paraméter csak a true és false értékeket veszi fel, definiálja a paramétert System.Management.Automation.SwitchParameter típusúként.
A kapcsolóparamétereket a rendszer úgy kezeli, mint true amikor egy parancsban meg van adva. Ha a paraméter nem szerepel egy parancsban, a Windows PowerShell a paraméter falseértékét veszi figyelembe. Ne definiáljon logikai paramétereket.
Ha a paraméternek 3 értéket kell megkülönböztetnie: $true, $false és "meghatározatlan", akkor adjon meg egy Null értékű<bool> típusú paramétert. A harmadik, "meghatározatlan" érték szükséglete általában akkor fordul elő, ha a parancsmag módosíthatja egy objektum logikai tulajdonságát. Ebben az esetben a "meghatározatlan" azt jelenti, hogy nem módosítja a tulajdonság aktuális értékét.
Paramétereket támogató tömbök
A felhasználóknak gyakran ugyanazt a műveletet több argumentumon kell végrehajtaniuk. Ezeknek a felhasználóknak a parancsmagoknak paraméterbemenetként el kell fogadniuk egy tömböt, hogy a felhasználó windowsos PowerShell-változóként átadhassa az argumentumokat a paraméternek. A Get-Process parancsmag például egy tömböt használ a lekérni kívánt folyamatok nevét azonosító sztringekhez.
A PassThru paraméter támogatása
Alapértelmezés szerint számos, a rendszert módosító parancsmag, például a Stop-Process parancsmag "fogadóként" működik az objektumok esetében, és nem ad vissza eredményt. Ezeknek a parancsmagoknak implementálniuk kell a PassThru paramétert, hogy kényszerítsék a parancsmagot egy objektum visszaadására.
PassThru A paraméter megadásakor a parancsmag egy objektumot a System.Management.Automation.Cmdlet.WriteObject metódus hívásával ad vissza. A következő parancs például leállítja a Calc (CalculatorApp.exe) alkalmazást, és az eredményül kapott folyamatot átadja a csővezetéknek.
Stop-Process -Name CalculatorApp -PassThru
A legtöbb esetben a Hozzáadás, a Beállítás és az Új parancsmagoknak támogatniuk kell egy paramétert PassThru .
Támogatási paraméterkészletek
A parancsmagok célja egyetlen cél elérése. A művelet vagy a műveleti cél leírásának azonban gyakran több módja is van. Egy folyamat például a neve, az azonosítója vagy egy folyamatobjektum alapján azonosítható. A parancsmagnak támogatnia kell a céljainak minden ésszerű ábrázolását. A parancsmag általában megfelel ennek a követelménynek az együttes működésű paraméterkészletek (más néven paraméterkészletek) megadásával. Egyetlen paraméter tetszőleges számú paraméterkészlethez tartozhat. További információ a paraméterkészletekről: parancsmag paraméterkészletei.
Paraméterkészletek megadásakor a készletben csak egy paramétert állítson be ValueFromPipeline értékre. A paraméterattribútum deklarálásáról további információt a ParameterAttribute Deklarációban talál.
Paraméterkészletek használata esetén az alapértelmezett paraméterkészletet a Parancsmag attribútum határozza meg. Az alapértelmezett paraméterkészletnek tartalmaznia kell az interaktív Windows PowerShell-munkamenetben valószínűleg használt paramétereket. A Parancsmag attribútum deklarálásával kapcsolatos további információkért lásd: CmdletAttribute Deklaráció.
Visszajelzés küldése a felhasználónak (SD04)
Az ebben a szakaszban található irányelvek segítségével visszajelzést küldhet a felhasználónak. Ez a visszajelzés lehetővé teszi a felhasználó számára, hogy tisztában legyen azzal, mi történik a rendszerben, és jobb rendszergazdai döntéseket hozzon.
A Windows PowerShell-futtatókörnyezet lehetővé teszi a felhasználó számára, hogy egy beállítási változó beállításával megadhatja, hogyan kezelheti az egyes hívások kimenetét a Write metódushoz. A felhasználó több beállítási változót is beállíthat, köztük egy változót, amely meghatározza, hogy a rendszernek meg kell-e jelenítenie az információkat, valamint egy változót, amely meghatározza, hogy a rendszernek le kell-e kérdeznie a felhasználót a további műveletek végrehajtása előtt.
A WriteWarning, a WriteVerbose és a WriteDebug metódus támogatása
A parancsmagnak meghívnia kell a System.Management.Automation.Cmdlet.WriteWarning metódust, ha a parancsmag egy olyan műveletet fog végrehajtani, amely esetleg nem kívánt eredményt ad. Egy parancsmagnak például ezt a metódust kell meghívnia, ha a parancsmag írásvédett fájl felülírására készül.
A parancsmagnak meg kell hívnia a System.Management.Automation.Cmdlet.WriteVerbose metódust, ha a felhasználónak részletes információra van szüksége a parancsmag működéséről. Egy parancsmagnak például ezt az információt kell meghívnia, ha a parancsmag szerzője úgy érzi, hogy vannak olyan forgatókönyvek, amelyek további információkat igényelhetnek a parancsmag működéséről.
A parancsmagnak a System.Management.Automation.Cmdlet.WriteDebug metódust kell meghívnia, amikor egy fejlesztő vagy terméktámogatási mérnöknek meg kell értenie, hogy mi sérült a parancsmag műveletében. Nem szükséges, hogy a parancsmag meghívja a System.Management.Automation.Cmdlet.WriteDebug metódust ugyanabban a kódban, amely meghívja a System.Management.Automation.Cmdlet.WriteVerbose metódust , mert a Debug paraméter mindkét információkészletet megjeleníti.
A WriteProgress támogatása hosszú ideig tartó műveletekhez
Azok a parancsmagműveletek, amelyek hosszú időt vesznek igénybe, és amelyek nem futnak a háttérben, támogatniuk kell a folyamatjelentést a System.Management.Automation.Cmdlet.WriteProgress metódushoz intézett rendszeres hívásokon keresztül.
A gazdafelületek használata
Előfordulhat, hogy a parancsmagnak közvetlenül a felhasználóval kell kommunikálnia a System.Management.Automation.Cmdlet osztály által támogatott különböző Írási vagy Should metódusok használata helyett. Ebben az esetben a parancsmagnak a System.Management.Automation.PSCmdlet osztályból kell származnia, és a System.Management.Automation.PSCmdlet.Host* tulajdonságot kell használnia. Ez a tulajdonság különböző kommunikációs szinteket támogat, például a PromptForChoice, a Prompt és a WriteLine/ReadLine típusokat. A legspecifikusabb szinten lehetővé teszi az egyes kulcsok olvasását és írását, valamint a pufferek kezelését is.
Hacsak egy parancsmagot kifejezetten grafikus felhasználói felület (GUI) létrehozására terveztek, a System.Management.Automation.PSCmdlet.Host* tulajdonsággal nem kerülheti el a gazdagépet. A grafikus felhasználói felület létrehozására tervezett parancsmagra példa a Out-GridView parancsmag.
Megjegyzés
A parancsmagok nem használhatják a System.Console API-t.
Parancsmag súgófájljának létrehozása (SD05)
Minden parancsmag-szerelvényhez hozzon létre egy Help.xml fájlt, amely a parancsmaggal kapcsolatos információkat tartalmazza. Ez az információ tartalmazza a parancsmag leírását, a parancsmag paramétereinek leírását, példákat a parancsmag használatára és egyebekre.
Kód irányelvei
A parancsmagok kódolása során a következő irányelveket kell követni, hogy egységes felhasználói élmény legyen a parancsmagok és más parancsmagok használata között. Ha talál egy, a helyzetére vonatkozó kód-útmutatót, mindenképpen tekintse meg a hasonló irányelvekre vonatkozó tervezési irányelveket.
Kódolási paraméterek (SC01)
Paraméter definiálása a Paraméter attribútummal deklarált parancsmagosztály nyilvános tulajdonságának deklarálásával. A paramétereknek nem kell a parancsmag származtatott .NET-keretrendszerosztályának statikus tagjainak lenniük. A paraméterattribútum deklarálásáról további információt a Paraméterattribútum-deklaráció című témakörben talál.
A Windows PowerShell elérési útjainak támogatása
A Windows PowerShell elérési útja a névterekhez való hozzáférés normalizálásának mechanizmusa. Amikor windowsos PowerShell-elérési utat rendel egy paraméterhez a parancsmagban, a felhasználó megadhat egy egyéni "meghajtót", amely egy adott elérési út parancsikonjaként működik. Amikor egy felhasználó kijelöl egy ilyen meghajtót, a tárolt adatok, például a beállításjegyzék adatai konzisztens módon használhatók.
Ha a parancsmag lehetővé teszi a felhasználó számára, hogy egy fájlt vagy adatforrást adjon meg, meg kell adnia egy System.String típusú paramétert. Ha egynél több meghajtó támogatott, a típusnak tömbnek kell lennie. A paraméter nevének a következő aliasával PSPathkell lenniePath: .
Emellett a Path paraméternek helyettesítő karaktereket is támogatnia kell. Ha a helyettesítő karakterek támogatása nem szükséges, adjon meg egy paramétert LiteralPath .
Ha a parancsmag által beolvasott vagy írt adatoknak fájlnak kell lenniük, a parancsmagnak el kell fogadnia a Windows PowerShell elérési útjának bemenetét, és a parancsmagnak a System.Management.Automation.SessionState.Path tulajdonsággal kell lefordítani a Windows PowerShell-elérési utakat a fájlrendszer által felismert elérési utakra. Az egyes mechanizmusok a következő módszereket tartalmazzák:
- System.Management.Automation.PSCmdlet.GetResolvedProviderPathFromPSPath
- System.Management.Automation.PSCmdlet.GetUnresolvedProviderPathFromPSPath
- System.Management.Automation.PathIntrinsics.GetResolvedProviderPathFromPSPath
- System.Management.Automation.PathIntrinsics.GetUnresolvedProviderPathFromPSPath
Ha a parancsmag által beolvasott vagy írott adatok csak sztringek egy fájl helyett, a parancsmagnak a szolgáltató tartalomadatait (Content tagját) kell használnia az olvasáshoz és íráshoz. Ez az információ a System.Management.Automation.Provider.CmdletProvider.InvokeProvider tulajdonságból származik. Ezek a mechanizmusok lehetővé teszik más adattárak számára, hogy részt vegyenek az adatok olvasásában és írásában.
Helyettesítő karakterek támogatása
Ha lehetséges, a parancsmagnak támogatnia kell a helyettesítő karaktereket. A helyettesítő karakterek támogatása a parancsmag számos pontján előfordul (különösen akkor, ha egy paraméter egy sztringet vesz igénybe egy objektumkészletből származó objektum azonosításához). A StopProc-oktatóanyag minta Stop-Proc parancsmagja például egy paramétert Name határoz meg a folyamatneveket képviselő sztringek kezelésére. Ez a paraméter támogatja a helyettesítő karaktereket, így a felhasználó egyszerűen megadhatja a leállítandó folyamatokat.
Ha a helyettesítő karakterek támogatása elérhető, a parancsmagművelet általában tömböt hoz létre. Időnként nincs értelme tömböt támogatni, mert előfordulhat, hogy a felhasználó egyszerre csak egyetlen elemet használ. A Set-Location parancsmagnak például nem kell támogatnia egy tömböt, mert a felhasználó csak egyetlen helyet állít be. Ebben a példában a parancsmag továbbra is támogatja a helyettesítő karaktereket, de a felbontást egyetlen helyre kényszeríti.
A helyettesítő karakterek mintáival kapcsolatos további információkért lásd: Helyettesítő karakterek támogatása a parancsmag paramétereiben.
Objektumok definiálása
Ez a szakasz útmutatást tartalmaz a parancsmagok objektumainak meghatározásához és a meglévő objektumok kiterjesztéséhez.
Standard tagok definiálása
Definiáljon standard tagokat egy objektumtípus egyéni Types.ps1xml fájlban való kiterjesztéséhez (sablonként használja a Windows PowerShell Types.ps1xml fájlt). A standard tagokat egy PSStandardMembers nevű csomópont határozza meg. Ezek a definíciók lehetővé teszik más parancsmagok és a Windows PowerShell-futtatókörnyezet számára, hogy konzisztens módon működjenek az objektummal.
Paraméterként használandó objectmemberek definiálása
Ha objektumot tervez egy parancsmaghoz, győződjön meg arról, hogy a tagok közvetlenül a használni kívánt parancsmagok paramétereihez vannak megfeleltetve. Ez a leképezés lehetővé teszi, hogy az objektum könnyen elküldhető legyen a csővezetékbe, és át lehessen adni egyik parancsmagról a másikra.
A parancsmagok által visszaadott , már meglévő .NET-keretrendszer-objektumok gyakran hiányoznak néhány fontos vagy kényelmes tagból, amelyekre a szkript fejlesztőjének vagy felhasználójának szüksége van. Ezek a hiányzó tagok különösen fontosak lehetnek a megjelenítéshez és a megfelelő tagnevek létrehozásához, hogy az objektum megfelelően továbbítható legyen a folyamatnak. Hozzon létre egy egyéni Types.ps1xml fájlt a szükséges tagok dokumentálásához. A fájl létrehozásakor a következő elnevezési konvenciót javasoljuk: <Your_Product_Name>. Types.ps1xml.
Hozzáadhat például egy Mode szkripttulajdonságot a System.IO.FileInfo típushoz, hogy jobban megjelenítse egy fájl attribútumait. Emellett aliastulajdonságot is hozzáadhat Count a System.Array típushoz, hogy lehetővé tegye a tulajdonságnév konzisztens használatát (ahelyett Length).
Az IComparable Interface implementálása
Implementáljon egy System.IComparable interfészt az összes kimeneti objektumon. Ez lehetővé teszi, hogy a kimeneti objektumok egyszerűen át legyenek csövezve a különböző rendezési és elemzési parancsmagokra.
Megjelenítési információk frissítése
Ha egy objektum megjelenítése nem adja meg a várt eredményeket, hozzon létre ehhez az objektumhoz egy egyéni <YourProductName>.Format.ps1xml fájlt.
Jól definiált folyamatcsatorna bemenet (SC02) támogatása
Megvalósítás egy adatfolyam közepére
Implementáljon egy parancsmagot, feltéve, hogy az egy folyamat közepéről lesz meghívva (vagyis más parancsmagok fogják előállítani a bemenetét, vagy felhasználják a kimenetét). Tegyük fel például, hogy a Get-Process parancsmag, mivel adatokat hoz létre, csak a folyamat első parancsmagjaként használatos.
Mivel azonban ez a parancsmag egy folyamat közepére van tervezve, ez a parancsmag lehetővé teszi, hogy a folyamat korábbi parancsmagjai vagy adatai megadják a lekérni kívánt folyamatokat.
Az adatcsőből származó bemenet támogatása
A parancsmag minden paraméterkészletében adjon meg legalább egy olyan paramétert, amely támogatja a folyamat bemenetét. A folyamatbemenet támogatása lehetővé teszi, hogy a felhasználó lekérje az adatokat vagy objektumokat, elküldje őket a megfelelő paraméterkészletnek, és közvetlenül egy parancsmagnak adja át az eredményeket.
A paraméter akkor fogadja el a folyamat bemenetét, ha a Paraméter attribútum tartalmazza a ValueFromPipeline kulcsszót, a ValueFromPipelineByPropertyName kulcsszóattribútumot vagy mindkét kulcsszót a deklarációjában. Ha egy paraméterkészlet egyetlen paramétere sem támogatja a ValueFromPipeline vagy ValueFromPipelineByPropertyName kulcsszavakat, a parancsmag nem helyezhető el értelmesen egy másik parancsmag után, mert figyelmen kívül fogja hagyni a folyamat bemenetét.
A ProcessRecord metódus támogatása
A folyamat előző parancsmagjának összes rekordjának elfogadásához a parancsmagnak implementálnia kell a System.Management.Automation.Cmdlet.ProcessRecord metódust . A Windows PowerShell többször hívja meg ezt a metódust, minden olyan rekord esetében, amelyet a rendszer elküld a parancsmagnak.
Önálló rekordok írása a csővezetékbe (SC03)
Amikor egy parancsmag objektumokat ad vissza, a parancsmagnak azonnal meg kell írnia az objektumokat a létrehozásukkor. A parancsmag nem tarthatja őket a kombinált tömbbe történő pufferelés céljából. Az objektumokat bemenetként fogadó parancsmagok ezután késedelem nélkül feldolgozhatják, megjeleníthetik vagy feldolgozhatják a kimeneti objektumokat. A kimeneti objektumokat egyenként létrehozó parancsmagnak a System.Management.Automation.Cmdlet.WriteObject metódust kell meghívnia. Egy olyan parancsmagnak, amely kimeneti objektumokat hoz létre kötegekben (például azért, mert egy mögöttes API kimeneti objektumok tömbjét adja vissza) meghívja a System.Management.Automation.Cmdlet.WriteObject metódust, amelynek második paramétere a truekövetkező.
Cmdletek készítése Case-Insensitive és Case-Preserving (SC04)
Alapértelmezés szerint maga a Windows PowerShell nem érzékeny a kis- és nagybetűkre. Mivel azonban számos régebbi rendszerrel foglalkozik, a Windows PowerShell megőrzi a kis- és nagybetűk kezelését az egyszerű működés és kompatibilitás érdekében. Más szóval, ha egy karaktert nagybetűkben ad meg, a Windows PowerShell nagybetűkben tartja. Ahhoz, hogy a rendszerek jól működjenek, a parancsmagnak követnie kell ezt az egyezményt. Ha lehetséges, a kis- és nagybetűket nem érzékenyítő módon kell működjön. A parancsban vagy a csővezetékben később előforduló cmdletek esetében azonban meg kell őriznie az eredeti esetet.
Lásd még:
szükséges fejlesztési irányelvek