Parancsmag – áttekintés
A parancsmagok a PowerShell-környezetben használt egyszerűsített parancsok. A PowerShell-futtatás ezeket a parancsmagokat a parancssorban megadott automatizálási szkriptek kontextusában hívja meg. A PowerShell-futtatás programozott módon is meghívja őket a PowerShell API-kon keresztül.
Parancsmagok
A parancsmagok végrehajtják a műveletet, és általában egy Microsoft .NET objektumot ad vissza a folyamat következő parancsához. A parancsmag egyetlen parancs, amely részt vesz a PowerShell folyamat-szemantikáját. Ez magában foglalja a bináris (C#) parancsmagokat, a speciális szkriptfunkciókat, a CDXML-t és a munkafolyamatokat.
Ez az SDK-dokumentáció a C# nyelven írt bináris parancsmagok létrehozási módszerét ismerteti. A szkriptalapú parancsmagokkal kapcsolatos információkért lásd:
Bináris parancsmag létrehozásához meg kell valósítanunk egy parancsmagosztályt, amely a parancsmagok két speciális alaposztályának egyikét származtatja. A származtatott osztálynak a következőnek kell lennie:
- Deklarálhat egy attribútumot, amely parancsmagként azonosítja a származtatott osztályt.
- Definiálja azokat a nyilvános tulajdonságokat, amelyek attribútumokkal vannak ékesítve, amelyek parancsmag-paraméterekként azonosítják a nyilvános tulajdonságokat.
- Felülbírál egy vagy több bemeneti feldolgozási metódust a rekordok feldolgozásához.
A osztályt tartalmazó szerelvényt közvetlenül az Import-Module parancsmag használatával is betöltheti, vagy létrehozhat egy gazdaalkalmazást, amely betölti a szerelvényt a System.Management.Automation.Runspaces.Initialsessionstate API használatával. Mindkét módszer programozott és parancssori hozzáférést biztosít a parancsmag funkcióihoz.
Parancsmagok használati feltételei
A PowerShell-parancsmagok dokumentációjában gyakran a következő kifejezések használatosak:
Parancsmag-attribútum
Egy .NET-attribútum, amely parancsmagosztály parancsmagként való deklarálható. Bár a PowerShell számos más választható attribútumot is használ, a Parancsmag attribútumra is szükség van. További információ erről az attribútumról: Parancsmag-attribútumdeklaráció.
Parancsmag paraméter
A felhasználó vagy a parancsmagot futtató alkalmazás számára elérhető paramétereket meghatározó nyilvános tulajdonságok. A parancsmagok kötelező, elnevezett, pozíció- és kapcsolóparaméterekkel is rendelkezik. A kapcsolóparaméterekkel olyan paramétereket határozhat meg, amelyek csak akkor vannak kiértékelve, ha a paraméterek meg vannak adva a hívásban. További információ a különböző paramétertípusokról: Parancsmagparaméterek.
Paraméterkészlet
Paraméterek csoportja, amelyek egy adott művelet végrehajtásához használhatók ugyanabban a parancsban. Egy parancsmag több paraméterkészletből is lehet, de minden paraméterkészletnek legalább egy egyedi paraméterrel kell lennie. A parancsmagok jó kialakítása erősen azt sugallja, hogy az egyedi paraméter is kötelező paraméter. A paraméterkészletekkel kapcsolatos további információkért lásd: Parancsmag-paraméterkészletek.
Dinamikus paraméter
Egy paraméter, amely futásidőben lesz hozzáadva a parancsmaghoz. A dinamikus paraméterek általában akkor kerülnek a parancsmagba, ha egy másik paraméter egy adott értékre van beállítva. További információ a dinamikus paraméterekről: Parancsmag dinamikus paraméterei.
Bemeneti feldolgozási módszerek
A System.Management.Automation.Cmdlet osztály a következő virtuális metódusokat biztosítja a rekordok feldolgozásához. Az összes származtatott parancsmagosztálynak felül kell bírálni egy vagy több metódust:
- System.Management.Automation.Cmdlet.BeginProcessing:A parancsmag opcionális, egyszeres előfeldolgozási funkcióját biztosítja.
- System.Management.Automation.Cmdlet.ProcessRecord:A parancsmag rekordok közötti feldolgozási funkcióját biztosítja. A System.Management.Automation.Cmdlet.ProcessRecord metódust a parancsmag bemenetétől függően bármikor vagy egyáltalán nem hívhatja meg.
- System.Management.Automation.Cmdlet.EndProcessing:A parancsmag opcionális, egyszeres utófeldolgozási funkcióját biztosítja.
- System.Management.Automation.Cmdlet.StopProcessing:A feldolgozás leáll, amikor a felhasználó aszinkron módon leállítja a parancsmagot (például a CTRLC billentyű + lenyomásával).
További információ ezekről a módszerekről: Parancsmagok bemeneti feldolgozási módszerei.
Egy parancsmag megvalósításakor felül kell bírálni legalább egy ilyen bemeneti feldolgozási módszert. A ProcessRecord() metódust általában azért bírálja felül, mert a parancsmag által feldolgozott összes rekordhoz meg van hívva. Ezzel szemben a BeginProcessing() metódust és az EndProcessing() metódust egyszer hívják meg a rekordok előfeldolgozásához vagy utófeldolgozásához. További információ ezekről a módszerekről: Bemenetfeldolgozási módszerek.
ShouldProcess funkció
A PowerShell segítségével olyan parancsmagokat hozhat létre, amelyek visszajelzést kérnek a felhasználótól, mielőtt a parancsmag módosítja a rendszert. A funkció használatához a parancsmagnak deklarálnunk kell, hogy az támogatja-e a funkciót a Parancsmag attribútum deklarálható deklarálva, és a parancsmagnak meg kell hívnia ShouldProcess
a System.Management.Automation.Cmdlet.ShouldProcess és System.Management.Automation.Cmdlet.ShouldContinue metódusokat a bemeneti feldolgozási metódusból. További információ a funkció ShouldProcess
támogatásához: Megerősítés kérése.
Tranzakció
Parancsok logikai csoportja, amelyek egyetlen feladatként vannak kezelve. A feladat automatikusan meghiúsul, ha a csoport bármely parancsa meghiúsul, és a felhasználó választhat, hogy elfogadja vagy elutasítja a tranzakción belül végrehajtott műveleteket. Egy tranzakcióban való részvételhez a parancsmagnak deklarálva kell lennie, hogy támogatja a tranzakciókat a Parancsmag attribútum deklarálása esetén. A tranzakciók támogatása a 2.0 Windows PowerShell ban lett bevezetve. További információ a tranzakciókról: Tranzakciók támogatása.
Miben különböznek a parancsmagok a parancsoktól?
A parancsmagok a következő módokon térnek el más parancshéj-környezetekben található parancsoktól:
- A parancsmagok a .NET-osztályok példányai; nem önálló végrehajtható fájlok.
- A parancsmagok akár egy tucat sornyi kódból is létre is hozhatóak.
- A parancsmagok általában nem saját elemzési, hibabemeneti vagy kimeneti formázást futtatnak. Az elemzési, hibabemeneti és kimeneti formázást a PowerShell-futtatás kezeli.
- A parancsmagok szövegstreamek helyett a folyamat bemeneti objektumát használják fel, és a parancsmagok általában kimenetként kézbesítik az objektumokat a folyamatnak.
- A parancsmagok azért rekordorientáltak, mert egyszerre csak egyetlen objektumot feldolgoznak.
Parancsmag alaposztályok
Windows PowerShell a következő két alaposztályból származtatott parancsmagokat támogatja.
A legtöbb parancsmag a System.Management.Automation.Cmdlet alaposztályból származtatott .NET-osztályokon alapul. Az osztályból való származtatás lehetővé teszi, hogy a parancsmagok a minimális függőségkészletet használják a Windows PowerShell futtatáskor. Ennek két előnye van. Az első előny az, hogy a parancsmag objektumai kisebbek, és kevésbé valószínű, hogy a PowerShell-futtatás változásai hatással lesznek rá. A második előny az, hogy ha szükséges, közvetlenül létrehozhatja a parancsmag-objektum egy példányát, majd közvetlenül meghívhatja azt ahelyett, hogy a PowerShell-futtatáson keresztül hívna meg.
A bonyolultabb parancsmagok a System.Management.Automation.PSCmdlet alaposztályból származtatott .NET-osztályokon alapulnak. Az osztályból való származtatás sokkal több hozzáférést biztosít a PowerShell-futtatáshoz. Ez a hozzáférés lehetővé teszi, hogy a parancsmag szkripteket hívjon meg, hogy hozzáférjen a szolgáltatókhoz, és hozzáférjen az aktuális munkamenet-állapothoz. (Az aktuális munkamenet-állapot eléréséhez munkamenet-változókat és -beállításokat kap és ad meg.) Az osztályból való származtatás azonban növeli a parancsmag-objektum méretét, és ez azt jelenti, hogy a parancsmag szorosabban van a PowerShell-futtatás aktuális verziójához való.
Általában, hacsak nincs szüksége a PowerShell-futtatás kiterjesztett elérésére, a System.Management.Automation.Cmdlet osztályból kell származtatnunk. A PowerShell-futtatás azonban kiterjedt naplózási képességekkel rendelkezik a parancsmagok végrehajtáshoz. Ha a naplózási modell a naplózástól függ, megakadályozhatja a parancsmag végrehajtását egy másik parancsmagból a System.Management.Automation.PSCmdlet osztályból való származtatással.
Parancsmag-attribútumok
A PowerShell számos .NET-attribútumot határoz meg, amelyek a parancsmagok kezelésére és a PowerShell által biztosított általános funkciók megadására használhatók, és amelyekre a parancsmagnak szüksége lehet. Az attribútumokkal például kijelölhet egy osztályt parancsmagként, megadhatja a parancsmag paramétereit, és kérheti a bemenet érvényesítését, így a parancsmag fejlesztőinek nem kell megvalósítaniuk ezt a funkciót a parancsmagkódjukban. További információ az attribútumokkal kapcsolatban: PowerShell-attribútumok.
Parancsmagok nevei
A PowerShell a parancsmagok elnevezése egy ige-főnév pár használatával történt. A PowerShellben található parancsmag például a parancshéjban regisztrált összes parancsmag Get-Command
lekért nevére használható. A parancsmag azonosítja a parancsmag által végrehajtott műveletet, a főnév pedig azt az erőforrást, amelyen a parancsmag végrehajtja a műveletét.
Ezek a nevek akkor vannak megadva, amikor a .NET-osztály parancsmagként van deklarálva. A .NET-osztály parancsmagként való deklarállyal kapcsolatos további információkért lásd: Parancsmag-attribútumdeklaráció.
Parancsmagkód írása
Ez a dokumentum két módszert biztosít a parancsmagkód írásának felderítésére. Ha inkább magyarázat nélkül szeretné látni a kódot, lásd: Példák parancsmagkódra. Ha további magyarázatra van szükség a kóddal kapcsolatban, tekintse meg a GetProc-oktatóanyag, a StopProc-oktatóanyag, vagy a SelectStr-oktatóanyag témakört.
További információ a parancsmagok írásának irányelveiről: Cmdlet Development Guidelines ( Parancsmagfejlesztési útmutató).