A InfoWiki wikiből
Aktuális változat (2009. június 24., 18:17) (lapforrás) (uploaded) |
|||
(4 közbeeső változat nincs mutatva) | |||
1. sor: | 1. sor: | ||
+ | |||
+ | |||
== Windows Powershell CMDLET írása == | == Windows Powershell CMDLET írása == | ||
140. sor: | 142. sor: | ||
Ezután meg kell csinálnunk a "telepítési varázslatot". Bizonyára észrevettük, hogy a PSSnapin kapott egy RunInstaller attributumot. A telepítő egyszerűen regisztrálja a snapint a PowerShellel. A telepítő futtatásához használhatjuk az InstallUtil eszközt. Nyissunk egy Visual Studio cmd prompt-ot és lépjünk be a solutionünk bin/debug könyvtárába (ahol az assembly dll-ünk található) és futtassuk: | Ezután meg kell csinálnunk a "telepítési varázslatot". Bizonyára észrevettük, hogy a PSSnapin kapott egy RunInstaller attributumot. A telepítő egyszerűen regisztrálja a snapint a PowerShellel. A telepítő futtatásához használhatjuk az InstallUtil eszközt. Nyissunk egy Visual Studio cmd prompt-ot és lépjünk be a solutionünk bin/debug könyvtárába (ahol az assembly dll-ünk található) és futtassuk: | ||
- | Install | + | Install sajátassemblyneve.dll |
Ezt követően indítsuk el a Windows PowerShellt. | Ezt követően indítsuk el a Windows PowerShellt. | ||
Gépeljük be: | Gépeljük be: | ||
- | Get-PSSnapIn - registered | + | Get-PSSnapIn -registered |
+ | |||
+ | aminek ki kell listáznia a snapinunkat a többi jelenleg regisztrálttal együtt. | ||
+ | |||
+ | A következő amit gépeljünk be: | ||
+ | |||
+ | Add-PSSnapIn sajátsnapinneve | ||
+ | |||
+ | Ez betölti a snapinunkat. | ||
+ | |||
+ | Most már működik az alábbi parancs: | ||
+ | |||
+ | Get-Proc | ||
+ | |||
+ | és láthatjuk a gépen futó processek listáját. | ||
+ | |||
+ | |||
+ | <p align="left"><i>Forrás: [http://blogs.msdn.com/daiken/archive/2007/02/07/creating-a-windows-powershell-cmdlet-using-the-visual-studio-windows-powershell-templates.aspx]</i></p> | ||
+ | <p align="right"><i>Magyar Péter</i></p> |
Aktuális változat
Windows Powershell CMDLET írása
Elöször is az alábbi linkről szerezzük be a Visual Studio 2005 templateket. VB.NET-ben és C#-ban érhetők el.
Amíg tart a letöltés, vegyük végig a a Powershell cmdlet készítés lépéseit.
Ezek egyszerűek:
- Töltsük le és telepítsük a Windows Powershellt
- Töltsük le és telepítsük a Windows SDK for Vista-t - erre az assemblyk telepítésekor lesz szükség, melyeket a Windows Powershell igényel.
- Töltsük le és telepítsük a sablonokat a fenti linkről. Rengeteg időt spórolnak meg nekünk, ingyenesek és szabadon módosíthatjuk/frissíthetjük őket
- Készítsünk egy új Windows Powershell projektet a kedvenc programozási nyelvünkön
- Adjunk hozzá a projekthez egy új cdmlet elemet
- Valósítsuk meg a ProcessRecord eljárást
- Fordítsuk le
- Telepítsük az assemblyt
- Adjuk hozzá a cmdleteket a Powershellhez
- Használjuk őket
Soknak tűnhet, de valójában nagyon egyszerű és hamarosan mindenre cmdleteket fogunk gyártani.
Most, hogy a templatek letöltése befejeződött, a zip állományt kicsomagolva 2 vsi fájlt kell, hogy találjunk. Az egyik VB.NET-hez a másik C#-hoz. Telepítsük fel azt, amelyiket szeretnénk.
Nincsenek aláírva, így figyelmeztetésre számíthatunk.
Ezt követően indítsuk el a Visual Studiot és készítsünk egy új projektet, válasszuk a Powershell templatet a projekt templatenek.
A projekt tartalmaz egy PSSnapin fájlt és referenciát az assemblyhez System.Management.Automation - ami a c:\program files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0 könyvtárban található meg. ( ezek meglétéhez telepített Windows SDK for Vista kell )
Jobb klikk a PSSnapin fájlon majd válasszuk a 'view code'-t. ( ha duplán kattintunk a fájlra a Visual Studio megpróbálja megnyitni a 'deigner window'-t, de ez nem fog sikerülni - ám emiatt ne aggódjunk, PSSnapin nem arra lett kitalálva, hogy a 'visual designer'-ben dolgozzunk vele)
A PSSnapin 5 propertyt tartalmaz, melyeket magunknak kell befejezni. Magáért beszélönek kell lenniük - kulcsfontosságú a 'Name' amivel hivatkoztni tudunk rá a Powershellben. Adjunk meg ezeknek a propertyknek helyes értékeket.
A PSSnapin osztály a PSSnapin-ból öröklödik, ami az alap osztály 'snapin'-ok készítésénél. A 'snapin'-ok a Powershellt felépítő egységek.
Jellemzően 'snapin'-okat adsz hozzá vagy távolítassz el. A 'snapin'-ok egy vagy több cmdletet és/vagy providert(pl. alap telepítésnél: Alias,File system,Environment,Certificate,Registry) tartalmaznak.
Ezután egy új osztályt fogunk a cmdletünkhöz adni. Annyi cmdletet adhatunk a 'snapin'-hoz amennyi csak szükséges, ezen útmutatóban csak egyet fogunk.
Jobb klikk a projekten és válasszuk az új elem hozzáadását. Válasszuk ki a Windows PowerShell PSCmdletet a listából. Ennek kellene alapértelmezettnek lennie a cmdleteknél. Az osztály neve GetProc.
Az új osztálynak a PSCmdlet-böl kell öröklödnie, hozzá van fűzve egy cmdlet attributum és tartalmaz egy paramétert, ami ki van kommentelve, valamint egy ProcessRecord eljárást.
Az attribútumban változtassuk a nevet 'Proc'-ra. Powershellben az osztály neve lényegtelen. A cmdlet az attribútumból kapja a nevét. A mi esetünkben a cmdletünket 'Get-Proc'-nak akarjuk hívni, így használjuk a megszokott 'Get' és 'Proc' nevet.
Az attribútum 'tag'-nek a következőképp kellene kinéznie:
[Cmdlet(VerbsCommon.Get, "Proc", SupportsShouldProcess = true)]
Mióta a cmdletünknek nincs szüksége paraméterekre, nem kell vele semmit csinálnunk. Másfelől, ha megnézzük a 'parameter code'-t, láthatjuk, hogy az egyszerűen egy cimkézett property.
Ez azt jelenti, hogy nem kell többet a parancssort elemezni ahhoz, hogy rájöjjünk mely paraméterek maradtak le és az arg[0]-val kapcsolatos kellemetlenségekkel sem kell foglalkoznunk. A Powershell futásidőben elemzi a parancssort és összeszedi a propertyket mielőtt meghívná a ProcessRecord eljárást.
A ProcessRecord eljárás jellemzően ott található, ahol a cmdletjeinket kidolgozzuk. A cmdletünk (ha még nem jöttünk volna rá) egyszerűen fel fogja sorolni az összes futó process-t a gepünkön. Egyszerű, de nagyon jól bemutatja a Powershell cmdlet készítés lépéseit.
Az összes process felsorolásához használhatjuk a System.Diagnostics.Process osztályt és segítségül hívhatjuk a GetProcess() eljárást. Ezen objektumok leírására használhatjuk a WriteObject eljárást. a 'true' a végén megmondja a Powershellnek, hogy az object amit leírunk egy gyűjtemény és minden objectet külön ki kell írnia:
WriteObject(System.Diagnostics.Process.GetProcesses(), true);
Tehát az osztályunk forráskódja így néz ki:
using System; using System.Collections.Generic; using System.Text; using System.Management.Automation; using System.Collections; namespace BlogSample { [Cmdlet(VerbsCommon.Get, "Proc", SupportsShouldProcess = true)] public class GetProc : PSCmdlet { #region Parameters /* [Parameter(Position = 0, Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "Help Text")] [ValidateNotNullOrEmpty] public string Name { } */ #endregion protected override void ProcessRecord() { try { WriteObject(System.Diagnostics.Process.GetProcesses(), true); } catch (Exception) { } } } }
Most, hogy megvan a teljes forráskód, nyomhatunk egy buildet a solutionre. Tegyünk is így.
Ezután meg kell csinálnunk a "telepítési varázslatot". Bizonyára észrevettük, hogy a PSSnapin kapott egy RunInstaller attributumot. A telepítő egyszerűen regisztrálja a snapint a PowerShellel. A telepítő futtatásához használhatjuk az InstallUtil eszközt. Nyissunk egy Visual Studio cmd prompt-ot és lépjünk be a solutionünk bin/debug könyvtárába (ahol az assembly dll-ünk található) és futtassuk:
Install sajátassemblyneve.dll
Ezt követően indítsuk el a Windows PowerShellt.
Gépeljük be:
Get-PSSnapIn -registered
aminek ki kell listáznia a snapinunkat a többi jelenleg regisztrálttal együtt.
A következő amit gépeljünk be:
Add-PSSnapIn sajátsnapinneve
Ez betölti a snapinunkat.
Most már működik az alábbi parancs:
Get-Proc
és láthatjuk a gépen futó processek listáját.
Forrás: [1]
Magyar Péter