.NET als basis voor de Windows Powershell
Aangezien Windows Powershell in belangrijke mate op .NET gebaseerd is, is enig inzicht in de werking van dit platform onmisbaar voor wie aan de slag wil met Powershell-scripts, die als extensie .ps1 zullen dragen. Het .NET-platform is vergelijkbaar met J2EE in die zin dat het naast een runtime omgeving een ontwikkelframework omvat. De .NET-API is bovendien volledig objectgeoriënteerd en dat principe wordt ook in Powershell gevolgd. Zo erven alle Cmdlets hun basiseigenschappen van dezelfde klasse en is het zelfs mogelijk eigen Cmdlets te ontwikkelen. Dit biedt een belangrijk voordeel boven sommige Linux-tools, omdat het bijvoorbeeld door het overerven van een 'toString-method' betekent dat de verschillende commando's hun uitvoer op een consistente manier genereren.


Dat PowerShell in sterke mate op de .NET-fundamenten rust, heeft ook zijn gevolgen voor de mogelijkheden op de commandline. Het typecasten van variabelen is daar een mooi voorbeeld van. Zo zorgt de opdracht
De basisconcepten van Windows PowershellDe codenaam van Windows Powershell luidt 'Monad' en die naam werd niet toevallig gekozen. In zijn werk 'Monadology' beschrijft Gottfried Leibniz een filosofie waarin het universum samengesteld is uit fundamentele elementen, monads genaamd. Dit principe werd in het achterhoofd gehouden tijdens het ontwikkelen van de vernieuwde shell en heeft geresulteerd in een verzameling Cmdlets die de fundamenten van de scripting-omgeving vormen.
Terwijl Unix-commando's hoofdzakelijk gebaseerd zijn op tekstuele invoer en uitvoer, werkt Powershell voornamelijk met objecten. Wanneer de interactie plaatsvindt via het scherm, kunnen de resultaten daardoor eenvoudig tekstueel weergegeven worden, maar als de uitvoer van een commando gebruikt moet worden als invoer voor een ander commando, is door deze benadering geen tool als
PS C:\Documents and Settings\Yoeri> Get-Command |
>> ConvertTo-Html name,ParameterSets -title "Process Information" -body "<H2>Inf
ormation about the Powershell-commands that can be used.</H2>" |
>> Set-Content c:\scripts\commands.htm
>>
PS C:\Documents and Settings\Yoeri> Get-Process |
>> ConvertTo-Html name,path,fileversion -title "Process Information" -body "<H2>
Information about the processes running on the computer.</H2>" |
>> Set-Content c:\scripts\processen.htm
>>


Dat PowerShell in sterke mate op de .NET-fundamenten rust, heeft ook zijn gevolgen voor de mogelijkheden op de commandline. Het typecasten van variabelen is daar een mooi voorbeeld van. Zo zorgt de opdracht
[int]"10" + 5 ervoor dat de string omgezet wordt naar een integerwaarde en vervolgens opgeteld wordt, zodat het resultaat 15, en niet 105, bedraagt. Met wat geavanceerde opdrachten is het door slim gebruik van de juiste dll-bestanden en objecten zelfs mogelijk Windows Forms te creëren vanaf de commandline. Het is overigens nog niet mogelijk om ps1-commando's te triggeren met behulp van GUI-events. Ontwikkelaar Jeffrey Snover heeft echter al laten weten dat men wel aan een aantal Cmdlets werkt om interactie met GUI's mogelijk te maken, maar dat deze naar alle waarschijnlijkheid niet in de eerste release van de shell verwerkt zullen worden.Terwijl Unix-commando's hoofdzakelijk gebaseerd zijn op tekstuele invoer en uitvoer, werkt Powershell voornamelijk met objecten. Wanneer de interactie plaatsvindt via het scherm, kunnen de resultaten daardoor eenvoudig tekstueel weergegeven worden, maar als de uitvoer van een commando gebruikt moet worden als invoer voor een ander commando, is door deze benadering geen tool als
grep of awk meer nodig.PS C:\Documents and Settings\Yoeri> Get-WmiObject Win32_PerfFormattedData_PerfOS
_System | Format-Table Processes,Threads,SystemUptime,ProcessorQueueLength -Auto
size
Processes Threads SystemUptime ProcessorQueueLength
--------- ------- ------------ --------------------
77 739 13406 0
Voorbeeldopdracht die de prestaties van de computer overzichtelijk weergeeft
Volgende pagina (Parsing Modes - 3/13)
