söndag, januari 28, 2007

PowerShellProvider

Jag har nu skapat en PowerShellProvider. Man skulle kunna jämföra det med ett virtuellt filsystem för PowerShell. Redan från början innehåller PowerShell ett antal providers:
PS F:\/> Get-PSProvider

Name Drives
---- ------
Alias {Alias}
Environment {Env}
FileSystem {C, E, F, D...}
Function {Function}
Registry {HKLM, HKCU}
Variable {Variable}
Certificate {cert}

Som t.ex. Registry innehåller ju då naturligtvis registret, och man kan då komma åt registret med samma kommando som man är van att använda på filsystemet. Dir för att visa innehållet, cd för att navigera i strukturen mm. Dir t.ex. är ett alias för cmdlet:en Get-ChildItem och cd är ett alias för Set-Location.

Jag skapade MyProvider som ärvde av NavigationCmdletProvider, överlagrade följande funktioner:
  • InitializeDefaultDrives
  • NormalizeRelativePath
  • GetChildItems
  • IsItemContainer
  • GetItem
Jag hade då skapat ett standard interface in mot applikationen.
Kunde navigera bland applikationens objekt med cd och titta på dem med dir. Jag kan tilldela ett av applikationens objekt till en PowerShell-variabel och komma åt värden på t.ex. Properties.
Jag läste sedan om PowerGadgets, en samling datavisualiseringskomponenter, som visarinstrument, diagram o.dyl. och plötsligt kunde jag enkelt visa egenskaper i mitt program med standardkomponenter. Dessutom kan jag naturligtvis skriva skript som interagerar med mitt program.

Jag gjorde följande:
cd MyProvider:
$s = Get-Item "Server 1/System/Time/Second"
$s.Attributes[3].ClrValue | Out-Gauge

Out-Gauge är en cmdlet i PowerGadgets som nu visade värdet av en property i objektet Second. Det fjärde attributet (
Attributes[3]) som råkar vara aktuell sekund uvarande minut.

Där finns mer att göra, implementera kopiering, radering, skapa nya objekt. Men inte heller det verkar vara mycket jobb. Mer om hur man skapar interface mot PowerShell

En intressant artikel om datadrivna tester med Excel och PowerShell

Inga kommentarer: