Commandlet Definition XML (CDXML)
Eintrag zuletzt aktualisiert am: 30.12.2012
Die
PowerShell ist schon 2006 erschienen und bot in der ersten Version zwar eine Menge Grundinfrastruktur zur Datenverarbeitung mit Import, Export, Filtern, Sortieren, Gruppieren und Zählen, aber wenig administrative
Commandlets für den Zugriff auf System-Systembausteine. Erst mit
Windows 7 und
Windows Server 2008 R2 führte Microsoft mehr administrative
Commandlets ein, aber weiterhin nur für einige ausgewählte Bereiche wie dem
Active Directory. Nun mit
Windows 8 und Windows Server 2012 steigt die Anzahl der
Commandlets fast explosionsartig. Während Microsoft bisher alle
Commandlets explizit implementiert hatte, steckt ein Trick hinter der neuen Produktivität der Redmonder Entwickler: Die meistern der vielen neuen
Commandlets sind als
WMI-Klassen automatisch generiert worden.
Die
Windows Management Instrumentation (
WMI) gibt es in Windows schon seit Zeiten von
Windows 2000 als Systemmamangementinfrastruktur, die den Standard „
Web Based Enterprise Management (
WBEM)“ der
Desktop Management Task Force (DMTF) [
http://www.dmtf.org] realisiert. Mit
Windows 8 und
Windows Server 2012 führt Microsoft eine neue Version ein, die viele
WMI-Klassen einfacher realisiert als bisher und zudem erlaubt, als den
WMI-
Metadaten ein
PowerShell-
Commandlet zu generieren. Dabei wird kein Programmcode erzeugt, sondern lediglich eine „
Commandlet Definition
XML“-Datei (CD
XML), die die
PowerShell verwendet, um Ad-Hoc passende
Commandlets bereitzustellen, wenn man solche CD
XML-Datei mit Import-Module einliest.
<?xml version="1.0" encoding="utf-8"?>
<
PowerShellMetadata xmlns="
http://schemas.microsoft.com/cmdlets-over-objects/2009/11">
<Class ClassName="ROOT/Microsoft/Windows/
SMB/
MSFT_
SMBShare">
<Version>1.0</Version>
<DefaultNoun>SmbShare</DefaultNoun>
<InstanceCmdlets>
<!--
// Get-SmbShare
-->
<GetCmdletParameters>
<QueryableProperties>
<
Property PropertyName="Name">
<Type PSType="string" />
<RegularQuery AllowGlobbing="true">
<CmdletParameterMetadata IsMandatory="false" Position="1" ValueFrom
PipelineBy
PropertyName="true" />
</RegularQuery>
</
Property>
<
Property PropertyName="ScopeName">
<Type PSType="string" />
<RegularQuery AllowGlobbing="false">
<CmdletParameterMetadata IsMandatory="false" Position="2" ValueFrom
PipelineBy
PropertyName="true" />
</RegularQuery>
</
Property>
…
</Cmdlet>
</InstanceCmdlets>
<StaticCmdlets>
<!--
// New-SmbShare
-->
<Cmdlet>
<CmdletMetadata Verb="New" ConfirmImpact="Medium" HelpUri="
http://go.microsoft.com/fwlink/?LinkID=241957" Aliases="nsmbs"/>
<Method MethodName="CreateShare">
<ReturnValue>
<Type PSType="uint32" />
<CmdletOutputMetadata>
<ErrorCode />
</CmdletOutputMetadata>
</ReturnValue>
<Parameters>
<Parameter ParameterName="Description">
<Type PSType="string" />
<CmdletParameterMetadata>
<AllowEmptyString />
<ValidateNotNull />
</CmdletParameterMetadata>
</Parameter>
<Parameter ParameterName="ConcurrentUserLimit">
<Type PSType="Uint32" />
<CmdletParameterMetadata>
<AllowEmptyString />
<ValidateNotNull />
</CmdletParameterMetadata>
…
Listing 1: Ausschnitte aus der Datei SmbShare.cdxml