Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Thema beschreibt, wie man einen Windows-PowerShell-Anbieter erstellt, der die Daten in einem Datenspeicher bearbeiten kann. In diesem Thema werden die Datenelemente im Speicher als die "Elemente" des Datenspeichers bezeichnet. Folglich wird ein Provider, der die Daten im Speicher bearbeiten kann, als Windows PowerShell Item Provider bezeichnet.
Hinweis
Sie können die C#-Quelldatei (AccessDBSampleProvider03.cs) für diesen Anbieter mit dem Microsoft Windows Software Development Kit for Windows Vista und .NET Framework 3.0 Runtime Components herunterladen. Für Download-Anweisungen siehe Wie man Windows PowerShell installiert und das Windows PowerShell SDK herunterlädt.
Die heruntergeladenen Quelldateien sind im Verzeichnis PowerShell Samples verfügbar. Weitere Informationen zu anderen Implementierungen von Windows PowerShell-Anbietern finden Sie unter Designing Your Windows PowerShell Provider.
Der in diesem Thema beschriebene Windows-PowerShell-Item-Anbieter erhält Daten aus einer Access-Datenbank. In diesem Fall ist ein "Element" entweder eine Tabelle in der Access-Datenbank oder eine Zeile in einer Tabelle.
Definition der Windows PowerShell Item Provider-Klasse
Ein Windows-PowerShell-Item-Anbieter muss eine .NET-Klasse definieren, die von der Basisklasse System.Management.Automation.Provider.ItemCmdletProvider abgeleitet ist. Im Folgenden finden Sie die Klassendefinition für den in diesem Abschnitt beschriebenen Item-Anbieter.
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : ItemCmdletProvider
Beachten Sie, dass in dieser Klassendefinition das Attribut System.Management.Automation.Provider.CmdletProviderAttribute zwei Parameter enthält. Der erste Parameter gibt einen benutzerfreundlichen Namen für den Anbieter an, der von Windows PowerShell verwendet wird. Der zweite Parameter spezifiziert die Windows-PowerShell-spezifischen Fähigkeiten, die der Anbieter während der Befehlsverarbeitung der Windows-PowerShell-Laufzeit bereitstellt. Für diesen Anbieter gibt es keine zusätzlichen Windows-PowerShell-spezifischen Funktionen.
Definition der Basisfunktionalität
Wie in Design Your Windows PowerShell Provider beschrieben, leitet sich die Klasse System.Management.Automation.Provider.DriveCmdletProvider von mehreren anderen Klassen ab, die unterschiedliche Provider-Funktionalitäten bereitstellten. Ein Windows-PowerShell-Item-Anbieter muss daher alle Funktionen definieren, die von diesen Klassen bereitgestellt werden.
Weitere Informationen zur Implementierung von Funktionen zum Hinzufügen sessionsspezifischer Initialisierungsinformationen und zur Freigabe von vom Anbieter verwendeten Ressourcen finden Sie unter Erstellung eines einfachen Windows PowerShell Providers. Die meisten Anbieter, einschließlich des hier beschriebenen Anbieters, können jedoch die Standardimplementierung dieser Funktionalität verwenden, die von Windows PowerShell bereitgestellt wird.
Bevor der Windows-PowerShell-Item-Anbieter die Elemente im Store manipulieren kann, muss er die Methoden der Basisklasse System.Management.Automation.Provider.DriveCmdletProvider implementieren, um auf den Datenspeicher zuzugreifen. Weitere Informationen zur Implementierung dieser Klasse finden Sie unter Erstellung eines Windows PowerShell Laufwerksanbieters.
Überprüfung der Pfadvalidität
Wenn man nach einem Datenelement sucht, stellt die Windows-PowerShell-Laufzeit dem Anbieter einen Windows-PowerShell-Pfad zur Verfügung, wie im Abschnitt "PSPath Konzepte" von How Windows PowerShell Works definiert. Ein Windows-PowerShell-Item-Anbieter muss die syntaktische und semantische Gültigkeit jedes an ihn übermittelten Pfades überprüfen, indem er die System.Management.Automation.Automation.Provider.ItemCmdletProvider.IsValidPath-Methode implementiert. Diese Methode gibt zurück, true wenn der Pfad gültig ist, und false andernfalls. Beachten Sie, dass die Implementierung dieser Methode nicht die Existenz des Objekts auf dem Pfad überprüfen sollte, sondern lediglich, dass der Pfad syntaktisch und semantisch korrekt ist.
Hier ist die Implementierung der Methode System.Management.Automation.Provider.ItemCmdletProvider.IsValidPath für diesen Anbieter. Beachten Sie, dass diese Implementierung eine NormalizePath-Hilfsmethode aufruft, um alle Separatoren im Pfad in einen einheitlichen zu konvertieren.
protected override bool IsValidPath(string path)
{
bool result = true;
// check if the path is null or empty
if (String.IsNullOrEmpty(path))
{
result = false;
}
// convert all separators in the path to a uniform one
path = NormalizePath(path);
// split the path into individual chunks
string[] pathChunks = path.Split(pathSeparator.ToCharArray());
foreach (string pathChunk in pathChunks)
{
if (pathChunk.Length == 0)
{
result = false;
}
}
return result;
} // IsValidPath
Feststellung, ob ein Gegenstand existiert
Nach Überprüfung des Pfades muss die Windows-PowerShell-Laufzeit feststellen, ob ein Datenelement an diesem Pfad existiert. Um diese Art von Abfrage zu unterstützen, implementiert der Windows-PowerShell-Item-Provider die Methode System.Management.Automation.Provider.ItemCmdletProvider.ItemExist. Diese Methode gibt ansonsten ein Element zurück, true das auf dem angegebenen Pfad gefunden wird, und false (Standard).
Hier ist die Implementierung der Methode System.Management.Automation.Provider.ItemCmdletProvider.ItemExists für diesen Anbieter. Beachten Sie, dass diese Methode die Hilfsmethoden PathIsDrive, ChunkPath und GetTable aufruft und ein anbieterdefiniertes DatabaseTableInfo-Objekt verwendet.
protected override bool ItemExists(string path)
{
// check if the path represented is a drive
if (PathIsDrive(path))
{
return true;
}
// Obtain type, table name and row number from path
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
DatabaseTableInfo table = GetTable(tableName);
if (type == PathType.Table)
{
// if specified path represents a table then DatabaseTableInfo
// object for the same should exist
if (table != null)
{
return true;
}
}
else if (type == PathType.Row)
{
// if specified path represents a row then DatabaseTableInfo should
// exist for the table and then specified row number must be within
// the maximum row count in the table
if (table != null && rowNumber < table.RowCount)
{
return true;
}
}
return false;
} // ItemExists
Was man bei der Implementierung von ItemExists beachten sollte
Die folgenden Bedingungen können für Ihre Implementierung von System.Management.Automation.Provider.ItemCmdletProvider.ItemExists gelten:
- Bei der Definition der Provider-Klasse könnte ein Windows-PowerShell-Item-Provider die Provider-Fähigkeiten von
ExpandWildcards,Filter,Include, oderExclude, aus der System.Management.Automation.Provider.ProviderCapabilities-Enumeration deklarieren. In diesen Fällen muss die Implementierung der Methode System.Management.Automation.Provider.ItemCmdletProvider.ItemExists sicherstellen, dass der an die Methode weitergegebene Pfad die Anforderungen der angegebenen Fähigkeiten erfüllt. Dazu sollte die Methode auf die entsprechenden Eigenschaften zugreifen, zum Beispiel die Eigenschaften System.Management.Automation.Provider.CmdletProvider.Exclude und System.Management.Automation.Provider.CmdletProvider.Include . - Die Implementierung dieser Methode sollte jede Form des Zugriffs auf das Element übernehmen, die das Element für den Benutzer sichtbar machen könnte. Wenn zum Beispiel ein Benutzer über den Dateisystem-Anbieter (bereitgestellt von Windows PowerShell) Schreibzugriff auf eine Datei hat, aber keinen Lesezugriff, existiert die Datei weiterhin und System.Management.Automation.Provider.ItemCmdletProvider.ItemExists gibt .
trueDeine Implementierung könnte erfordern, dass du ein Elternelement prüfst, um zu sehen, ob das Kindelement aufgezählt werden kann.
Dynamische Parameter an das Test-Path Cmdlet anhängen
Manchmal benötigt das Test-Path Cmdlet, das System.Management.Automation.Automation.Provider.ItemCmdletProvider.ItemExists aufruft, zusätzliche Parameter, die zur Laufzeit dynamisch angegeben werden. Um diese dynamischen Parameter bereitzustellen, muss der Windows-PowerShell-Item-Provider die Methode System.Management.Automation.Provider.ItemCmdletProvider.ItemExistsDynamicParameters implementieren. Diese Methode ruft die dynamischen Parameter für das Element auf dem angegebenen Pfad ab und gibt ein Objekt zurück, das Eigenschaften und Felder mit Parsing-Attributen besitzt, ähnlich einer cmdlet-Klasse oder einem System.Management.Automation.RuntimeDefinedParameterDictionary-Objekt . Die Windows-PowerShell-Laufzeit verwendet das zurückgegebene Objekt, um die Parameter zum Test-Path Cmdlet hinzuzufügen.
Dieser Windows-PowerShell-Item-Anbieter implementiert diese Methode nicht. Der folgende Code ist jedoch die Standardimplementierung dieser Methode.
Wiederherstellung eines Gegenstands
Um ein Element abzurufen, muss der Windows-PowerShell-Item-Provider die Methode System.Management.Automation.Provider.ItemCmdletProvider.GetItem überschreiben, um Aufrufe vom Cmdlet Get-Item zu unterstützen. Diese Methode schreibt das Element mit der Methode System.Management.Automation.Provider.CmdletProvider.WriteItemObject .
Hier ist die Implementierung der System.Management.Automation.Provider.ItemCmdletProvider.GetItem-Methode für diesen Anbieter. Beachten Sie, dass diese Methode die Hilfsmethoden GetTable und GetRow verwendet, um Einträge abzurufen, die entweder Tabellen in der Access-Datenbank oder Zeilen in einer Datentabelle sind.
protected override void GetItem(string path)
{
// check if the path represented is a drive
if (PathIsDrive(path))
{
WriteItemObject(this.PSDriveInfo, path, true);
return;
}// if (PathIsDrive...
// Get table name and row information from the path and do
// necessary actions
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Table)
{
DatabaseTableInfo table = GetTable(tableName);
WriteItemObject(table, path, true);
}
else if (type == PathType.Row)
{
DatabaseRowInfo row = GetRow(tableName, rowNumber);
WriteItemObject(row, path, false);
}
else
{
ThrowTerminatingInvalidPathException(path);
}
} // GetItem
Dinge, die man bei der Implementierung von GetItem beachten sollte
Die folgenden Bedingungen können für eine Implementierung von System.Management.Automation.Provider.ItemCmdletProvider.GetItem gelten:
Bei der Definition der Provider-Klasse könnte ein Windows-PowerShell-Item-Provider die Provider-Fähigkeiten von
ExpandWildcards,Filter,Include, oderExclude, aus der System.Management.Automation.Provider.ProviderCapabilities-Enumeration deklarieren. In diesen Fällen muss die Implementierung von System.Management.Automation.Provider.ItemCmdletProvider.GetItem sicherstellen, dass der an die Methode weitergegebene Pfad diese Anforderungen erfüllt. Dazu sollte die Methode auf die entsprechenden Eigenschaften zugreifen, zum Beispiel die Eigenschaften System.Management.Automation.Provider.CmdletProvider.Exclude und System.Management.Automation.Provider.CmdletProvider.Include .Standardmäßig sollten Überschreibungen dieser Methode keine Objekte abrufen, die im Allgemeinen vor dem Benutzer verborgen sind, es sei denn, die System.Management.Automation.Provider.CmdletProvider.Force-Eigenschaft ist auf
truegesetzt. Zum Beispiel prüft die Methode System.Management.Automation.Provider.ItemCmdletProvider.GetItem für den Dateisystemanbieter die Eigenschaft System.Management.Automation.Provider.CmdletProvider.Force, bevor sie versucht, System.Management.Automation.Automation.Provider.CmdletProvider.WriteItemObject für versteckte oder Systemdateien aufzurufen.
Dynamische Parameter an das Get-Item Cmdlet anhängen
Manchmal benötigt das Get-Item Cmdlet zusätzliche Parameter, die zur Laufzeit dynamisch angegeben werden. Um diese dynamischen Parameter bereitzustellen, muss der Windows-PowerShell-Item-Anbieter die Methode System.Management.Automation.Provider.ItemCmdletProvider.GetItemDynamicParameters implementieren. Diese Methode ruft die dynamischen Parameter für das Element auf dem angegebenen Pfad ab und gibt ein Objekt zurück, das Eigenschaften und Felder mit Parsing-Attributen besitzt, ähnlich einer cmdlet-Klasse oder einem System.Management.Automation.RuntimeDefinedParameterDictionary-Objekt . Die Windows-PowerShell-Laufzeit verwendet das zurückgegebene Objekt, um die Parameter zum Get-Item Cmdlet hinzuzufügen.
Dieser Anbieter implementiert diese Methode nicht. Der folgende Code ist jedoch die Standardimplementierung dieser Methode.
Einen Gegenstand aufstellen
Um ein Element zu setzen, muss der Windows-PowerShell-Item-Anbieter die Methode System.Management.Automation.Provider.ItemCmdletProvider.SetItem überschreiben, um Aufrufe vom Cmdlet Set-Item zu unterstützen. Diese Methode setzt den Wert des Elements auf dem angegebenen Pfad.
Dieser Anbieter bietet keine Überschreibung für die Methode System.Management.Automation.Provider.ItemCmdletProvider.SetItem . Folgendes ist jedoch die Standardimplementierung dieser Methode.
Was man bei der Implementierung von SetItem beachten sollte
Die folgenden Bedingungen können für Ihre Implementierung von System.Management.Automation.Provider.ItemCmdletProvider.SetItem gelten:
Bei der Definition der Provider-Klasse könnte ein Windows-PowerShell-Item-Provider die Provider-Fähigkeiten von
ExpandWildcards,Filter,Include, oderExclude, aus der System.Management.Automation.Provider.ProviderCapabilities-Enumeration deklarieren. In diesen Fällen muss die Implementierung von System.Management.Automation.Provider.ItemCmdletProvider.SetItem sicherstellen, dass der an die Methode weitergegebene Pfad diese Anforderungen erfüllt. Dazu sollte die Methode auf die entsprechenden Eigenschaften zugreifen, zum Beispiel die Eigenschaften System.Management.Automation.Provider.CmdletProvider.Exclude und System.Management.Automation.Provider.CmdletProvider.Include .Standardmäßig sollten Überschreibungen dieser Methode keine Objekte setzen oder schreiben, die dem Benutzer verborgen sind, es sei denn, die Eigenschaft System.Management.Automation.Provider.CmdletProvider.Force ist auf
truegesetzt. Ein Fehler sollte an die Methode System.Management.Automation.Provider.CmdletProvider.WriteError gesendet werden, wenn der Pfad ein verstecktes Element repräsentiert und System.Management.Automation.Provider.CmdletProvider.Force auffalsegesetzt ist.Ihre Implementierung der System.Management.Automation.Provider.ItemCmdletProvider.SetItem-Methode sollte System.Management.Automation.Provider.CmdletProvider.ShouldProcess aufrufen und deren Rückgabewert überprüfen, bevor Änderungen am Datenspeicher vorgenommen werden. Diese Methode wird verwendet, um die Ausführung einer Operation zu bestätigen, wenn eine Änderung am Datenspeicher vorgenommen wird, zum Beispiel durch das Löschen von Dateien. Die Methode System.Management.Automation.Provider.CmdletProvider.ShouldProcess sendet den Namen der zu ändernden Ressource an den Benutzer, wobei die Windows-PowerShell-Laufzeit alle Kommandozeileneinstellungen oder Präferenzvariablen berücksichtigt, um zu bestimmen, was angezeigt werden soll.
Nachdem der Aufruf von System.Management.Automation.Provider.CmdletProvider.ShouldProcess zurückkehrt
true, sollte die Methode System.Management.Automation.Provider.ItemCmdletProvider.SetItem die Methode System.Management.Automation.Provider.CmdletProvider.ShouldContinue aufrufen. Diese Methode sendet eine Nachricht an den Benutzer, um Rückmeldungen zu erhalten und zu überprüfen, ob die Operation fortgesetzt werden soll. Der Aufruf zu System.Management.Automation.Provider.CmdletProvider.ShouldContinue ermöglicht eine zusätzliche Überprüfung auf potenziell gefährliche Systemänderungen.
Abruf dynamischer Parameter für SetItem
Manchmal benötigt das Set-Item Cmdlet zusätzliche Parameter, die zur Laufzeit dynamisch angegeben werden. Um diese dynamischen Parameter bereitzustellen, muss der Windows-PowerShell-Item-Provider die Methode System.Management.Automation.Provider.ItemCmdletProvider.SetItemDynamicParameters implementieren. Diese Methode ruft die dynamischen Parameter für das Element auf dem angegebenen Pfad ab und gibt ein Objekt zurück, das Eigenschaften und Felder mit Parsing-Attributen besitzt, ähnlich einer cmdlet-Klasse oder einem System.Management.Automation.RuntimeDefinedParameterDictionary-Objekt . Die Windows-PowerShell-Laufzeit verwendet das zurückgegebene Objekt, um die Parameter zum Set-Item Cmdlet hinzuzufügen.
Dieser Anbieter implementiert diese Methode nicht. Der folgende Code ist jedoch die Standardimplementierung dieser Methode.
Einen Gegenstand abschließen
Um ein Element zu löschen, implementiert der Windows-PowerShell-Item-Provider die Methode System.Management.Automation.Provider.ItemCmdletProvider.ClearItem, um Aufrufe vom Cmdlet Clear-Item zu unterstützen. Diese Methode löscht das Datenelement am angegebenen Pfad.
Dieser Anbieter implementiert diese Methode nicht. Der folgende Code ist jedoch die Standardimplementierung dieser Methode.
Was man bei der Implementierung von ClearItem beachten sollte
Die folgenden Bedingungen können für eine Implementierung von System.Management.Automation.Provider.ItemCmdletProvider.ClearItem gelten:
Bei der Definition der Provider-Klasse könnte ein Windows-PowerShell-Item-Provider die Provider-Fähigkeiten von
ExpandWildcards,Filter,Include, oderExclude, aus der System.Management.Automation.Provider.ProviderCapabilities-Enumeration deklarieren. In diesen Fällen muss die Implementierung von System.Management.Automation.Provider.ItemCmdletProvider.ClearItem sicherstellen, dass der an die Methode weitergegebene Pfad diese Anforderungen erfüllt. Dazu sollte die Methode auf die entsprechenden Eigenschaften zugreifen, zum Beispiel die Eigenschaften System.Management.Automation.Provider.CmdletProvider.Exclude und System.Management.Automation.Provider.CmdletProvider.Include .Standardmäßig sollten Überschreibungen dieser Methode keine Objekte setzen oder schreiben, die dem Benutzer verborgen sind, es sei denn, die Eigenschaft System.Management.Automation.Provider.CmdletProvider.Force ist auf
truegesetzt. Ein Fehler sollte an die Methode System.Management.Automation.Provider.CmdletProvider.WriteError gesendet werden, wenn der Pfad ein für den Benutzer verborgenes Element darstellt und System.Management.Automation.Provider.CmdletProvider.Force auffalsegesetzt ist.Ihre Implementierung der System.Management.Automation.Provider.ItemCmdletProvider.SetItem-Methode sollte System.Management.Automation.Provider.CmdletProvider.ShouldProcess aufrufen und deren Rückgabewert überprüfen, bevor Änderungen am Datenspeicher vorgenommen werden. Diese Methode wird verwendet, um die Ausführung einer Operation zu bestätigen, wenn eine Änderung am Datenspeicher vorgenommen wird, zum Beispiel durch das Löschen von Dateien. Die Methode System.Management.Automation.Provider.CmdletProvider.ShouldProcess sendet den Namen der zu ändernden Ressource an den Benutzer mit der Windows-PowerShell-Laufzeit und übernimmt alle Kommandozeileneinstellungen oder Präferenzvariablen, um zu bestimmen, was angezeigt werden soll.
Nachdem der Aufruf von System.Management.Automation.Provider.CmdletProvider.ShouldProcess zurückkehrt
true, sollte die Methode System.Management.Automation.Provider.ItemCmdletProvider.SetItem die Methode System.Management.Automation.Provider.CmdletProvider.ShouldContinue aufrufen. Diese Methode sendet eine Nachricht an den Benutzer, um Rückmeldungen zu erhalten und zu überprüfen, ob die Operation fortgesetzt werden soll. Der Aufruf zu System.Management.Automation.Provider.CmdletProvider.ShouldContinue ermöglicht eine zusätzliche Überprüfung auf potenziell gefährliche Systemänderungen.
Dynamische Parameter für ClearItem abrufen
Manchmal benötigt das Clear-Item Cmdlet zusätzliche Parameter, die zur Laufzeit dynamisch angegeben werden. Um diese dynamischen Parameter bereitzustellen, muss der Windows-PowerShell-Item-Anbieter die Methode System.Management.Automation.Provider.ItemCmdletProvider.ClearItemDynamicParameters implementieren. Diese Methode ruft die dynamischen Parameter für das Element auf dem angegebenen Pfad ab und gibt ein Objekt zurück, das Eigenschaften und Felder mit Parsing-Attributen besitzt, ähnlich einer cmdlet-Klasse oder einem System.Management.Automation.RuntimeDefinedParameterDictionary-Objekt . Die Windows-PowerShell-Laufzeit verwendet das zurückgegebene Objekt, um die Parameter zum Clear-Item Cmdlet hinzuzufügen.
Dieser Item-Anbieter implementiert diese Methode nicht. Der folgende Code ist jedoch die Standardimplementierung dieser Methode.
Ausführung einer Standardaktion für einen Gegenstand
Ein Windows-PowerShell-Item-Anbieter kann die Methode System.Management.Automation.Provider.ItemCmdletProvider.InvokeDefaultAction implementieren, um Aufrufe vom Invoke-Item Cmdlet zu unterstützen, was es dem Anbieter ermöglicht, eine Standardaktion für das Element auf dem angegebenen Pfad auszuführen. Zum Beispiel könnte der FileSystem-Anbieter diese Methode verwenden, um ShellExecute für ein bestimmtes Element aufzurufen.
Dieser Anbieter implementiert diese Methode nicht. Der folgende Code ist jedoch die Standardimplementierung dieser Methode.
Was man bei der Implementierung von InvokeDefaultAction beachten sollte
Die folgenden Bedingungen können für eine Implementierung von System.Management.Automation.Provider.ItemCmdletProvider.InvokeDefaultAction gelten:
Bei der Definition der Provider-Klasse könnte ein Windows-PowerShell-Item-Provider die Provider-Fähigkeiten von
ExpandWildcards,Filter,Include, oderExclude, aus der System.Management.Automation.Provider.ProviderCapabilities-Enumeration deklarieren. In diesen Fällen muss die Implementierung von System.Management.Automation.Provider.ItemCmdletProvider.InvokeDefaultAction sicherstellen, dass der an die Methode weitergegebene Pfad diese Anforderungen erfüllt. Dazu sollte die Methode auf die entsprechenden Eigenschaften zugreifen, zum Beispiel die Eigenschaften System.Management.Automation.Provider.CmdletProvider.Exclude und System.Management.Automation.Provider.CmdletProvider.Include .Standardmäßig sollten Überschreibungen dieser Methode keine für den Benutzer verborgenen Objekte setzen oder schreiben, es sei denn , die Eigenschaft System.Management.Automation.Automation.Provider.CmdletProvider.Force ist auf
truegesetzt. Ein Fehler sollte an die Methode System.Management.Automation.Provider.CmdletProvider.WriteError gesendet werden, wenn der Pfad ein für den Benutzer verborgenes Element darstellt und System.Management.Automation.Provider.CmdletProvider.Force auffalsegesetzt ist.
Dynamische Parameter für InvokeDefaultAction abrufen
Manchmal benötigt das Invoke-Item Cmdlet zusätzliche Parameter, die zur Laufzeit dynamisch angegeben werden. Um diese dynamischen Parameter bereitzustellen, muss der Windows-PowerShell-Item-Anbieter die Methode System.Management.Automation.Provider.ItemCmdletProvider.InvokeDefaultActionDynamicParameters implementieren. Diese Methode ruft die dynamischen Parameter für das Element auf dem angegebenen Pfad ab und gibt ein Objekt zurück, das Eigenschaften und Felder mit Parsing-Attributen besitzt, ähnlich einer cmdlet-Klasse oder einem System.Management.Automation.RuntimeDefinedParameterDictionary-Objekt . Die Windows-PowerShell-Laufzeit verwendet das zurückgegebene Objekt, um die dynamischen Parameter zum Invoke-Item Cmdlet hinzuzufügen.
Dieser Item-Anbieter implementiert diese Methode nicht. Der folgende Code ist jedoch die Standardimplementierung dieser Methode.
Implementierung von Hilfsmethoden und -klassen
Dieser Item-Anbieter implementiert mehrere Hilfsmethoden und -klassen, die von den öffentlichen Überschreibungsmethoden unter Windows PowerShell verwendet werden. Der Code für diese Hilfsmethoden und Klassen ist im Abschnitt Codebeispiel dargestellt.
NormalizePath-Methode
Dieser Item-Anbieter implementiert eine NormalizePath-Hilfsmethode , um sicherzustellen, dass der Pfad ein konsistentes Format hat. Das angegebene Format verwendet einen Backslash (\) als Trennzeichen.
PathIsDrive-Methode
Dieser Item-Provider implementiert eine PathIsDrive-Hilfsmethode , um festzustellen, ob der angegebene Pfad tatsächlich der Laufwerksname ist.
ChunkPath-Methode
Dieser Item-Anbieter implementiert eine ChunkPath-Hilfsmethode , die den angegebenen Pfad aufteilt, damit der Anbieter seine einzelnen Elemente identifizieren kann. Es gibt ein Array zurück, das aus den Pfadelementen besteht.
GetTable-Methode
Dieser Item-Anbieter implementiert die GetTables-Hilfsmethode , die ein DatabaseTableInfo-Objekt zurückgibt, das Informationen über die im Aufruf angegebene Tabelle darstellt.
GetRow-Methode
Die System.Management.Automation.Provider.ItemCmdletProvider.GetItem-Methode dieses Item-Anbieters ruft die GetRows-Hilfsmethode auf. Diese Hilfsmethode ruft ein DatabaseRowInfo-Objekt ab, das Informationen über die angegebene Zeile in der Tabelle darstellt.
DatabaseTableInfo-Klasse
Dieser Item-Anbieter definiert eine DatabaseTableInfo-Klasse , die eine Sammlung von Informationen in einer Datentabelle in der Datenbank darstellt. Diese Klasse ähnelt der System.IO.Directoryinfo-Klasse .
Der Beispiel-Item-Anbieter definiert eine Methode DatabaseTableInfo.GetTableTables, die eine Sammlung von Tabelleninformationsobjekten zurückgibt, die die Tabellen in der Datenbank definieren. Diese Methode beinhaltet einen Try/Catch-Block, um sicherzustellen, dass ein Datenbankfehler als Zeile ohne Einträge angezeigt wird.
DatabaseRowInfo-Klasse
Dieser Item-Anbieter definiert die DatabaseRowInfo-Hilfsklasse , die eine Zeile in einer Datenbanktabelle darstellt. Diese Klasse ähnelt der System.IO.FileInfo-Klasse .
Der Beispielanbieter definiert eine Methode DatabaseRowInfo.GetRows, um eine Sammlung von Zeileninformationsobjekten für die angegebene Tabelle zurückzugeben. Diese Methode beinhaltet einen Versuch-/Fang-Block, um Ausnahmen zu fangen. Etwaige Fehler führen zu keiner Zeileninformation.
Codebeispiel
Für den vollständigen Beispielcode siehe AccessDbProviderSample03 Codebeispiel.
Definition von Objekttypen und Formatierung
Beim Schreiben eines Providers kann es notwendig sein, bestehenden Objekten Mitglieder hinzuzufügen oder neue Objekte zu definieren. Nach Abschluss erstellen Sie eine Types-Datei, die Windows PowerShell verwenden kann, um die Mitglieder des Objekts zu identifizieren, sowie eine Format-Datei, die definiert, wie das Objekt angezeigt wird. Weitere Informationen finden Sie unter Erweiterung von Objekttypen und Formatierung.
Aufbau des Windows-PowerShell-Anbieters
Sieh dir an, wie man Cmdlets, Anbieter und Host-Anwendungen registriert.
Testen des Windows PowerShell-Anbieters
Wenn dieser Windows-PowerShell-Item-Anbieter bei Windows PowerShell registriert ist, können Sie nur die grundlegende und Laufwerksfunktionalität des Providers testen. Um die Manipulation von Elementen zu testen, müssen Sie außerdem die Container-Funktionalität implementieren, die in Implementing a Container Windows PowerShell Provider beschrieben ist.
Siehe auch
- Windows PowerShell SDK
- Windows PowerShell Programmer's Guide
- Erstellung von Windows-PowerShell-Anbietern
- Design Ihres Windows-PowerShell-Anbieters
- Erweiterung von Objekttypen und Formatierung
- Wie Windows PowerShell funktioniert
- Erstellung eines Container-Windows-PowerShell-Anbieters
- Erstellung eines Laufwerks-Windows-PowerShell-Anbieters
- Wie man Cmdlets, Anbieter und Host-Anwendungen registriert