Személyes eszközök
Keresés

 

A InfoWiki wikiből


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.

Kép:Image09.png

Nincsenek aláírva, így figyelmeztetésre számíthatunk.

Kép:Image10.png

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.

Kép:image11.jpg

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

A lap eredeti címe: „http://wiki.ektf.hu/wiki/Opr4:CMDLET
Nézetek
nincs sb_18.119.253.93 cikk