Erstellen eines Windows PowerShell-Inhaltsanbieters
In diesem Thema wird beschrieben, wie Sie einen Windows PowerShell-Anbieter erstellen, mit dem der Benutzer den Inhalt der Elemente in einem Datenspeicher bearbeiten kann. Daher wird ein Anbieter, der den Inhalt von Elementen bearbeiten kann, als Windows PowerShell-Inhaltsanbieter bezeichnet.
Hinweis
Sie können die C#-Quelldatei (AccessDBSampleProvider06.cs) für diesen Anbieter mithilfe des Microsoft Windows Software Development Kit für Windows Vista und .NET Framework 3.0-Runtime-Komponenten herunterladen. Downloadanweisungen finden Sie unter Installieren von Windows PowerShell und Herunterladen des Windows PowerShell SDK-. Die heruntergeladenen Quelldateien sind im verzeichnis <PowerShell-Beispiele> verfügbar. Weitere Informationen zu anderen Windows PowerShell-Anbieterimplementierungen finden Sie unter Entwerfen Ihres Windows PowerShell-Anbieters.
Definieren der Windows PowerShell-Inhaltsanbieterklasse
Ein Windows PowerShell-Inhaltsanbieter muss eine .NET-Klasse erstellen, die die System.Management.Automation.Provider.IContentCmdletProvider Schnittstelle unterstützt. Dies ist die Klassendefinition für den in diesem Abschnitt beschriebenen Elementanbieter.
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : NavigationCmdletProvider, IContentCmdletProvider
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 gibt die windows PowerShell-spezifischen Funktionen an, die der Anbieter während der Befehlsverarbeitung für die Windows PowerShell-Laufzeit verfügbar macht. Für diesen Anbieter gibt es keine zusätzlichen Windows PowerShell-spezifischen Funktionen.
Definieren der Funktionalität der Basisklasse
Wie in Design Your Windows PowerShell Providerbeschrieben, wird die System.Management.Automation.Provider.NavigationCmdletProvider Klasse von mehreren anderen Klassen abgeleitet, die unterschiedliche Anbieterfunktionen bereitgestellt haben. Ein Windows PowerShell-Inhaltsanbieter definiert daher in der Regel alle Funktionen, die von diesen Klassen bereitgestellt werden.
Weitere Informationen zum Implementieren von Funktionen zum Hinzufügen sitzungsspezifischer Initialisierungsinformationen und zum Freigeben von Ressourcen, die vom Anbieter verwendet werden, finden Sie unter Creating a Basic Windows PowerShell Provider. Die meisten Anbieter, einschließlich des hier beschriebenen Anbieters, können jedoch die Standardimplementierung dieser Funktionalität verwenden, die von Windows PowerShell bereitgestellt wird.
Um auf den Datenspeicher zuzugreifen, muss der Anbieter die Methoden der System.Management.Automation.Provider.DriveCmdletProvider Basisklasse implementieren. Weitere Informationen zum Implementieren dieser Methoden finden Sie unter Erstellen eines Windows PowerShell-Laufwerkanbieters.
Zum Bearbeiten der Elemente eines Datenspeichers, z. B. Abrufen, Festlegen und Löschen von Elementen, muss der Anbieter die methoden implementieren, die von der System.Management.Automation.Provider.ItemCmdletProvider Basisklasse bereitgestellt werden. Weitere Informationen zum Implementieren dieser Methoden finden Sie unter Erstellen eines Windows PowerShell-Elementanbieters.
Um an Mehrschicht-Datenspeichern zu arbeiten, muss der Anbieter die von der System.Management.Automation.Provider.ContainerCmdletProvider Basisklasse bereitgestellten Methoden implementieren. Weitere Informationen zum Implementieren dieser Methoden finden Sie unter Erstellen eines Windows PowerShell-Containeranbieters.
Um rekursive Befehle, geschachtelte Container und relative Pfade zu unterstützen, muss der Anbieter die System.Management.Automation.Provider.NavigationCmdletProvider Basisklasse implementieren. Darüber hinaus kann dieser Windows PowerShell-Inhaltsanbieter System.Management.Automation.Provider.IContentCmdletProvider Schnittstelle an die System.Management.Automation.Provider.NavigationCmdletProvider Basisklasse anfügen und daher die von dieser Klasse bereitgestellten Methoden implementieren. Weitere Informationen finden Sie unter Implementieren dieser Methoden unter Implementieren eines Windows PowerShell-Navigationsanbieters.
Implementieren eines Inhaltslesers
Zum Lesen von Inhalten aus einem Element muss ein Anbieter eine Inhaltsleseklasse implementieren, die von System.Management.Automation.Provider.IContentReaderabgeleitet wird. Der Inhaltsleser für diesen Anbieter ermöglicht den Zugriff auf den Inhalt einer Zeile in einer Datentabelle. Die Inhaltsleseprogrammklasse definiert eine Read-Methode, die die Daten aus der angegebenen Zeile abruft, und gibt eine Liste zurück, die diese Daten darstellt, eine Seek-Methode, die den Inhaltsleser verschiebt, eine Close-Methode, die den Inhaltsleser schließt, und eine Dispose-Methode zurück.
public class AccessDBContentReader : IContentReader
{
// A provider instance is required so as to get "content"
private AccessDBProvider provider;
private string path;
private long currentOffset;
internal AccessDBContentReader(string path, AccessDBProvider provider)
{
this.path = path;
this.provider = provider;
}
/// <summary>
/// Read the specified number of rows from the source.
/// </summary>
/// <param name="readCount">The number of items to
/// return.</param>
/// <returns>An array of elements read.</returns>
public IList Read(long readCount)
{
// Read the number of rows specified by readCount and increment
// offset
string tableName;
int rowNumber;
PathType type = provider.GetNamesFromPath(path, out tableName, out rowNumber);
Collection<DatabaseRowInfo> rows =
provider.GetRows(tableName);
Collection<DataRow> results = new Collection<DataRow>();
if (currentOffset < 0 || currentOffset >= rows.Count)
{
return null;
}
int rowsRead = 0;
while (rowsRead < readCount && currentOffset < rows.Count)
{
results.Add(rows[(int)currentOffset].Data);
rowsRead++;
currentOffset++;
}
return results;
} // Read
/// <summary>
/// Moves the content reader specified number of rows from the
/// origin
/// </summary>
/// <param name="offset">Number of rows to offset</param>
/// <param name="origin">Starting row from which to offset</param>
public void Seek(long offset, System.IO.SeekOrigin origin)
{
// get the number of rows in the table which will help in
// calculating current position
string tableName;
int rowNumber;
PathType type = provider.GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Invalid)
{
throw new ArgumentException("Path specified must represent a table or a row :" + path);
}
if (type == PathType.Table)
{
Collection<DatabaseRowInfo> rows = provider.GetRows(tableName);
int numRows = rows.Count;
if (offset > rows.Count)
{
throw new
ArgumentException(
"Offset cannot be greater than the number of rows available"
);
}
if (origin == System.IO.SeekOrigin.Begin)
{
// starting from Beginning with an index 0, the current offset
// has to be advanced to offset - 1
currentOffset = offset - 1;
}
else if (origin == System.IO.SeekOrigin.End)
{
// starting from the end which is numRows - 1, the current
// offset is so much less than numRows - 1
currentOffset = numRows - 1 - offset;
}
else
{
// calculate from the previous value of current offset
// advancing forward always
currentOffset += offset;
}
} // if (type...
else
{
// for row, the offset will always be set to 0
currentOffset = 0;
}
} // Seek
/// <summary>
/// Closes the content reader, so all members are reset
/// </summary>
public void Close()
{
Dispose();
} // Close
/// <summary>
/// Dispose any resources being used
/// </summary>
public void Dispose()
{
Seek(0, System.IO.SeekOrigin.Begin);
GC.SuppressFinalize(this);
} // Dispose
} // AccessDBContentReader
Implementieren eines Inhaltsschreibers
Um Inhalt in ein Element zu schreiben, muss ein Anbieter eine Content Writer-Klasse implementieren, die von System.Management.Automation.Provider.IContentWriterabgeleitet wird. Die Content Writer-Klasse definiert eine Write-Methode, die den angegebenen Zeileninhalt schreibt, eine Seek-Methode, die den Inhaltsschreiber verschiebt, eine Close-Methode, die den Inhaltsschreiber schließt, und eine Dispose-Methode.
public class AccessDBContentWriter : IContentWriter
{
// A provider instance is required so as to get "content"
private AccessDBProvider provider;
private string path;
private long currentOffset;
internal AccessDBContentWriter(string path, AccessDBProvider provider)
{
this.path = path;
this.provider = provider;
}
/// <summary>
/// Write the specified row contents in the source
/// </summary>
/// <param name="content"> The contents to be written to the source.
/// </param>
/// <returns>An array of elements which were successfully written to
/// the source</returns>
///
public IList Write(IList content)
{
if (content == null)
{
return null;
}
// Get the total number of rows currently available it will
// determine how much to overwrite and how much to append at
// the end
string tableName;
int rowNumber;
PathType type = provider.GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Table)
{
OdbcDataAdapter da = provider.GetAdapterForTable(tableName);
if (da == null)
{
return null;
}
DataSet ds = provider.GetDataSetForTable(da, tableName);
DataTable table = provider.GetDataTable(ds, tableName);
string[] colValues = (content[0] as string).Split(',');
// set the specified row
DataRow row = table.NewRow();
for (int i = 0; i < colValues.Length; i++)
{
if (!String.IsNullOrEmpty(colValues[i]))
{
row[i] = colValues[i];
}
}
//table.Rows.InsertAt(row, rowNumber);
// Update the table
table.Rows.Add(row);
da.Update(ds, tableName);
}
else
{
throw new InvalidOperationException("Operation not supported. Content can be added only for tables");
}
return null;
} // Write
/// <summary>
/// Moves the content reader specified number of rows from the
/// origin
/// </summary>
/// <param name="offset">Number of rows to offset</param>
/// <param name="origin">Starting row from which to offset</param>
public void Seek(long offset, System.IO.SeekOrigin origin)
{
// get the number of rows in the table which will help in
// calculating current position
string tableName;
int rowNumber;
PathType type = provider.GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Invalid)
{
throw new ArgumentException("Path specified should represent either a table or a row : " + path);
}
Collection<DatabaseRowInfo> rows =
provider.GetRows(tableName);
int numRows = rows.Count;
if (offset > rows.Count)
{
throw new
ArgumentException(
"Offset cannot be greater than the number of rows available"
);
}
if (origin == System.IO.SeekOrigin.Begin)
{
// starting from Beginning with an index 0, the current offset
// has to be advanced to offset - 1
currentOffset = offset - 1;
}
else if (origin == System.IO.SeekOrigin.End)
{
// starting from the end which is numRows - 1, the current
// offset is so much less than numRows - 1
currentOffset = numRows - 1 - offset;
}
else
{
// calculate from the previous value of current offset
// advancing forward always
currentOffset += offset;
}
} // Seek
/// <summary>
/// Closes the content reader, so all members are reset
/// </summary>
public void Close()
{
Dispose();
} // Close
/// <summary>
/// Dispose any resources being used
/// </summary>
public void Dispose()
{
Seek(0, System.IO.SeekOrigin.Begin);
GC.SuppressFinalize(this);
} // Dispose
} // AccessDBContentWriter
Abrufen des Inhaltslesers
Um Inhalte von einem Element abzurufen, muss der Anbieter das System.Management.Automation.Provider.IContentCmdletProvider.GetContentReader* implementieren, um das cmdlet Get-Content
zu unterstützen. Diese Methode gibt den Inhaltsleser für das Element zurück, das sich im angegebenen Pfad befindet. Das Reader-Objekt kann dann geöffnet werden, um den Inhalt zu lesen.
Hier ist die Implementierung von System.Management.Automation.Provider.IContentCmdletProvider.GetContentReader* für diese Methode für diesen Anbieter.
public IContentReader GetContentReader(string path)
{
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Invalid)
{
ThrowTerminatingInvalidPathException(path);
}
else if (type == PathType.Row)
{
throw new InvalidOperationException("contents can be obtained only for tables");
}
return new AccessDBContentReader(path, this);
} // GetContentReader
public IContentReader GetContentReader(string path)
{
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Invalid)
{
ThrowTerminatingInvalidPathException(path);
}
else if (type == PathType.Row)
{
throw new InvalidOperationException("contents can be obtained only for tables");
}
return new AccessDBContentReader(path, this);
} // GetContentReader
Wichtige Dinge beim Implementieren von GetContentReader
Die folgenden Bedingungen können für eine Implementierung von System.Management.Automation.Provider.IContentCmdletProvider.GetContentReader*gelten:
Beim Definieren der Anbieterklasse deklariert ein Windows PowerShell-Inhaltsanbieter möglicherweise Anbieterfunktionen von ExpandWildcards, Filter, Include oder Exclude aus der System.Management.Automation.Provider.ProviderCapabilities Enumeration. In diesen Fällen muss die Implementierung der System.Management.Automation.Provider.IContentCmdletProvider.GetContentReader* Methode sicherstellen, dass der an die Methode übergebene Pfad die Anforderungen der angegebenen Funktionen erfüllt. Hierzu sollte die Methode auf die entsprechende Eigenschaft zugreifen, z. B. auf die System.Management.Automation.Provider.CmdletProvider.Exclude* und System.Management.Automation.Provider.CmdletProvider.Include* Eigenschaften.
Standardmäßig sollten Außerkraftsetzungen dieser Methode keinen Reader für Objekte abrufen, die vom Benutzer ausgeblendet sind, es sei denn, die System.Management.Automation.Provider.CmdletProvider.Force*-Eigenschaft ist auf
true
festgelegt. Ein Fehler sollte geschrieben werden, wenn der Pfad ein Element darstellt, das vom Benutzer ausgeblendet ist, und System.Management.Automation.Provider.CmdletProvider.Force* auffalse
festgelegt ist.
Anfügen dynamischer Parameter an das Cmdlet Get-Content
Das Cmdlet Get-Content
erfordert möglicherweise zusätzliche Parameter, die zur Laufzeit dynamisch angegeben werden. Um diese dynamischen Parameter bereitzustellen, muss der Windows PowerShell-Inhaltsanbieter die System.Management.Automation.Provider.IContentCmdletProvider.GetContentReaderdynamicparameters*-Methode implementieren. Diese Methode ruft dynamische Parameter für das Element im angegebenen Pfad ab und gibt ein Objekt mit Eigenschaften und Feldern mit Analyseattributen zurück, die einer Cmdlet-Klasse oder einem System.Management.Automation.RuntimeDefinedParameterDictionary-Objekt ähneln. Die Windows PowerShell-Laufzeit verwendet das zurückgegebene Objekt, um dem Cmdlet die Parameter hinzuzufügen.
Dieser Windows PowerShell-Containeranbieter implementiert diese Methode nicht. Der folgende Code ist jedoch die Standardimplementierung dieser Methode.
public object GetContentReaderDynamicParameters(string path)
{
return null;
}
public object GetContentReaderDynamicParameters(string path)
{
return null;
}
Abrufen des Inhalts-Writers
Um Inhalte in ein Element zu schreiben, muss der Anbieter die System.Management.Automation.Provider.IContentCmdletProvider.GetContentWriter* implementieren, um die Set-Content
- und Add-Content
-Cmdlets zu unterstützen. Diese Methode gibt den Inhaltsschreiber für das Element zurück, das sich im angegebenen Pfad befindet.
Hier ist die Implementierung von System.Management.Automation.Provider.IContentCmdletProvider.GetContentWriter* für diese Methode.
public IContentWriter GetContentWriter(string path)
{
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Invalid)
{
ThrowTerminatingInvalidPathException(path);
}
else if (type == PathType.Row)
{
throw new InvalidOperationException("contents can be added only to tables");
}
return new AccessDBContentWriter(path, this);
}
public IContentWriter GetContentWriter(string path)
{
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Invalid)
{
ThrowTerminatingInvalidPathException(path);
}
else if (type == PathType.Row)
{
throw new InvalidOperationException("contents can be added only to tables");
}
return new AccessDBContentWriter(path, this);
}
Wichtige Dinge beim Implementieren von GetContentWriter
Die folgenden Bedingungen können für Ihre Implementierung von System.Management.Automation.Provider.IContentCmdletProvider.GetContentWriter*gelten:
Beim Definieren der Anbieterklasse deklariert ein Windows PowerShell-Inhaltsanbieter möglicherweise Anbieterfunktionen von ExpandWildcards, Filter, Include oder Exclude aus der System.Management.Automation.Provider.ProviderCapabilities Enumeration. In diesen Fällen muss die Implementierung der System.Management.Automation.Provider.IContentCmdletProvider.GetContentWriter* Methode sicherstellen, dass der an die Methode übergebene Pfad die Anforderungen der angegebenen Funktionen erfüllt. Hierzu sollte die Methode auf die entsprechende Eigenschaft zugreifen, z. B. auf die System.Management.Automation.Provider.CmdletProvider.Exclude* und System.Management.Automation.Provider.CmdletProvider.Include* Eigenschaften.
Standardmäßig sollten Außerkraftsetzungen dieser Methode keinen Writer für Objekte abrufen, die vom Benutzer ausgeblendet sind, es sei denn, die System.Management.Automation.Provider.CmdletProvider.Force*-Eigenschaft ist auf
true
festgelegt. Ein Fehler sollte geschrieben werden, wenn der Pfad ein Element darstellt, das vom Benutzer ausgeblendet ist, und System.Management.Automation.Provider.CmdletProvider.Force* auffalse
festgelegt ist.
Anfügen dynamischer Parameter an die cmdlets Add-Content und Set-Content
Für die Cmdlets Add-Content
und Set-Content
sind möglicherweise zusätzliche dynamische Parameter erforderlich, die eine Laufzeit hinzugefügt werden. Um diese dynamischen Parameter bereitzustellen, muss der Windows PowerShell-Inhaltsanbieter die System.Management.Automation.Provider.IContentCmdletProvider.GetContentWriterDynamicParameters* Methode implementieren, um diese Parameter zu verarbeiten. Diese Methode ruft dynamische Parameter für das Element im angegebenen Pfad ab und gibt ein Objekt mit Eigenschaften und Feldern mit Analyseattributen zurück, die einer Cmdlet-Klasse oder einem System.Management.Automation.RuntimeDefinedParameterDictionary-Objekt ähneln. Die Windows PowerShell-Laufzeit verwendet das zurückgegebene Objekt, um die Parameter zu den Cmdlets hinzuzufügen.
Dieser Windows PowerShell-Containeranbieter implementiert diese Methode nicht. Der folgende Code ist jedoch die Standardimplementierung dieser Methode.
public object GetContentWriterDynamicParameters(string path)
{
return null;
}
Löschen von Inhalten
Ihr Inhaltsanbieter implementiert die System.Management.Automation.Provider.IContentCmdletProvider.ClearContent* Methode zur Unterstützung des cmdlets Clear-Content
. Mit dieser Methode wird der Inhalt des Elements im angegebenen Pfad entfernt, das Element bleibt jedoch erhalten.
Dies ist die Implementierung der System.Management.Automation.Provider.IContentCmdletProvider.ClearContent* Methode für diesen Anbieter.
public void ClearContent(string path)
{
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type != PathType.Table)
{
WriteError(new ErrorRecord(
new InvalidOperationException("Operation not supported. Content can be cleared only for table"),
"NotValidRow", ErrorCategory.InvalidArgument,
path));
return;
}
OdbcDataAdapter da = GetAdapterForTable(tableName);
if (da == null)
{
return;
}
DataSet ds = GetDataSetForTable(da, tableName);
DataTable table = GetDataTable(ds, tableName);
// Clear contents at the specified location
for (int i = 0; i < table.Rows.Count; i++)
{
table.Rows[i].Delete();
}
if (ShouldProcess(path, "ClearContent"))
{
da.Update(ds, tableName);
}
} // ClearContent
Wichtige Dinge beim Implementieren von ClearContent
Die folgenden Bedingungen können für eine Implementierung von System.Management.Automation.Provider.IContentCmdletProvider.ClearContent*gelten:
Beim Definieren der Anbieterklasse deklariert ein Windows PowerShell-Inhaltsanbieter möglicherweise Anbieterfunktionen von ExpandWildcards, Filter, Include oder Exclude aus der System.Management.Automation.Provider.ProviderCapabilities Enumeration. In diesen Fällen muss die Implementierung der System.Management.Automation.Provider.IContentCmdletProvider.ClearContent* Methode sicherstellen, dass der an die Methode übergebene Pfad die Anforderungen der angegebenen Funktionen erfüllt. Hierzu sollte die Methode auf die entsprechende Eigenschaft zugreifen, z. B. auf die System.Management.Automation.Provider.CmdletProvider.Exclude* und System.Management.Automation.Provider.CmdletProvider.Include* Eigenschaften.
Standardmäßig sollten Außerkraftsetzungen dieser Methode den Inhalt von Objekten, die vom Benutzer ausgeblendet sind, nicht löschen, es sei denn, die System.Management.Automation.Provider.CmdletProvider.Force*-Eigenschaft ist auf
true
festgelegt. Ein Fehler sollte geschrieben werden, wenn der Pfad ein Element darstellt, das vom Benutzer ausgeblendet ist, und System.Management.Automation.Provider.CmdletProvider.Force* auffalse
festgelegt ist.Ihre Implementierung der System.Management.Automation.Provider.IContentCmdletProvider.ClearContent*-Methode sollte System.Management.Automation.Provider.CmdletProvider.ShouldProcess aufrufen und den Rückgabewert überprüfen, bevor Änderungen am Datenspeicher vorgenommen werden. Diese Methode wird verwendet, um die Ausführung eines Vorgangs zu bestätigen, wenn eine Änderung am Datenspeicher vorgenommen wird, z. B. das Löschen von Inhalten. Die System.Management.Automation.Provider.CmdletProvider.ShouldProcess Methode sendet den Namen der Ressource, die an den Benutzer geändert werden soll, wobei die Windows PowerShell-Laufzeit alle Befehlszeileneinstellungen oder Einstellungsvariablen verarbeitet, um zu bestimmen, was angezeigt werden soll.
Nach dem Aufruf von System.Management.Automation.Provider.CmdletProvider.ShouldProcess wird
true
zurückgegeben, sollte die System.Management.Automation.Provider.IContentCmdletProvider.ClearContent*-Methode die System.Management.Automation.Provider.CmdletProvider.ShouldContinue-Methode aufrufen. Diese Methode sendet dem Benutzer eine Nachricht, um feedback zuzulassen, ob der Vorgang fortgesetzt werden soll. Der Aufruf von System.Management.Automation.Provider.CmdletProvider.ShouldContinue ermöglicht eine zusätzliche Überprüfung auf potenziell gefährliche Systemänderungen.
Anfügen dynamischer Parameter an das Cmdlet Clear-Content
Das Cmdlet Clear-Content
erfordert möglicherweise zusätzliche dynamische Parameter, die zur Laufzeit hinzugefügt werden. Um diese dynamischen Parameter bereitzustellen, muss der Windows PowerShell-Inhaltsanbieter die System.Management.Automation.Provider.IContentCmdletProvider.ClearContentDynamicParameters* Methode implementieren, um diese Parameter zu verarbeiten. Diese Methode ruft die Parameter für das Element am angegebenen Pfad ab. Diese Methode ruft dynamische Parameter für das Element im angegebenen Pfad ab und gibt ein Objekt mit Eigenschaften und Feldern mit Analyseattributen zurück, die einer Cmdlet-Klasse oder einem System.Management.Automation.RuntimeDefinedParameterDictionary-Objekt ähneln. Die Windows PowerShell-Laufzeit verwendet das zurückgegebene Objekt, um dem Cmdlet die Parameter hinzuzufügen.
Dieser Windows PowerShell-Containeranbieter implementiert diese Methode nicht. Der folgende Code ist jedoch die Standardimplementierung dieser Methode.
public object ClearContentDynamicParameters(string path)
{
return null;
}
public object ClearContentDynamicParameters(string path)
{
return null;
}
Codebeispiel
Den vollständigen Beispielcode finden Sie unter AccessDbProviderSample06 Code Sample.
Definieren von Objekttypen und Formatierungen
Beim Schreiben eines Anbieters kann es erforderlich sein, vorhandenen Objekten Member hinzuzufügen oder neue Objekte zu definieren. Wenn dies erfolgt, müssen Sie eine Typendatei erstellen, die Windows PowerShell verwenden kann, um die Elemente des Objekts und eine Formatdatei zu identifizieren, die definiert, wie das Objekt angezeigt wird. Weitere Informationen finden Sie unter Erweitern von Objekttypen und Formatierungen.
Erstellen des Windows PowerShell-Anbieters
Weitere Informationen finden Sie unter Registrieren von Cmdlets, Anbietern und Hostanwendungen.
Testen des Windows PowerShell-Anbieters
Wenn Ihr Windows PowerShell-Anbieter bei Windows PowerShell registriert wurde, können Sie ihn testen, indem Sie die unterstützten Cmdlets in der Befehlszeile ausführen. Testen Sie beispielsweise den Beispielinhaltsanbieter.
Verwenden Sie das Cmdlet Get-Content
, um den Inhalt des angegebenen Elements in der Datenbanktabelle am pfad abzurufen, der durch den parameter Path
angegeben wird. Der parameter ReadCount
gibt die Anzahl der Elemente für den zu lesenden definierten Inhaltsleser an (Standard 1). Mit dem folgenden Befehlseintrag ruft das Cmdlet zwei Zeilen (Elemente) aus der Tabelle ab und zeigt deren Inhalt an. Beachten Sie, dass die folgende Beispielausgabe eine fiktive Access-Datenbank verwendet.
Get-Content -Path mydb:\Customers -ReadCount 2
ID : 1
FirstName : Eric
LastName : Gruber
Email : ericgruber@fabrikam.com
Title : President
Company : Fabrikam
WorkPhone : (425) 555-0100
Address : 4567 Main Street
City : Buffalo
State : NY
Zip : 98052
Country : USA
ID : 2
FirstName : Eva
LastName : Corets
Email : evacorets@cohowinery.com
Title : Sales Representative
Company : Coho Winery
WorkPhone : (360) 555-0100
Address : 8910 Main Street
City : Cabmerlot
State : WA
Zip : 98089
Country : USA
Siehe auch
Erstellen von Windows PowerShell-Anbietern
Entwerfen Ihres Windows PowerShell-Anbieters
Erweitern von Objekttypen und Formatierungen
Implementieren eines Windows PowerShell-Navigationsanbieters