Po jedné diskuzi s kamarádem, který pracuje v Praze jako serverový správce na platformě windows, jsem dospěl k názoru, že Powershell může býti užitečný nástroj. Protože jsem kluk zvědaví, rozhodl jsem se, že přehodnotím předsudek, který vůči powershellu mám - skriptovací sračka ala vbscript, jscript.
K čemu by mohlo být spouštění takového skriptu dobré v našich rádiových podmínkách? Položil jsem si otázku. Máme server, na kterém běží pán démonů. Tento pán démonů nám spouští joby, když přijde nějaká událost (podnět) - časová událost, změní se soubor, nebo přijde podnět přes HTTP. Joby máme zapsané jako posloupnost akcí, definovaných v nějakém popisném XML souboru.
Co kdyby pán démonů místo našich jobů spouštěl powershell scripty?
Co kdybych začal jednoduše tím, že si napíši svůj první CmdLet.
1. Vytvořím si C# project ClassLibary a přidám si referenci na System.Management.Automation.dll assembly, která obsahuje třídy PSCmdlet a PSSnapIn.
Třída PSSnapIn slouží k registraci přídavného balíčku PSSnapIn. Její význam jsem úplně nepochopil. Možná, aby mohlo být vše složitější.
[RunInstaller(true)] public class CmdLetSnapIn : PSSnapIn { public override string Name { get { return "CmdLet"; } } public override string Vendor { get { return ""; } } public override string VendorResource { get { return "CmdLet,"; } } public override string Description { get { return "Registers the CmdLets and Providers in this assembly"; } } public override string DescriptionResource { get { return "CmdLet,Registers the CmdLets and Providers in this assembly"; } } }
Třída PSCmdlet, je třída CmdLetu. Třída slouží k vykonání CmdLetu.
[Cmdlet(VerbsCommon.Get, "CmdTest", SupportsShouldProcess = true)] public class CmdTest : 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) { } } }
To je tak k prvnímu CmdLetu asi vše. Nyní jej můžeme zkompilovat a nainstalovat. Nahrajeme jej do cesty s Moduly - cesta je uložená v systémové proměné PSModulePath. Pak už můžeme vesele spustit konzoli Powershellu.
- SnapIn registrujeme pomocí .NET utiliti InstallUtil jmenosnapinu (cesta dll)
- Registrované přílepky si vylistujeme: Get-PSSnapIn -registered - tady se objeví v seznamu CmdLet (jméno z třídy PSSnapIn).
- SnapIn přidámě pomocí Add-PSSnapIn CmdLet
- CmdLet zavoláme pomocí Get-CmdTest (!!!Název definovaný attributem Cmdlet!!!)
Žádné komentáře:
Okomentovat