Tworzenie dostawcy zawartości programu Windows PowerShellCreating a Windows PowerShell Content Provider

W tym temacie opisano sposób tworzenia dostawcy środowiska Windows PowerShell, który umożliwia użytkownikowi manipulowanie zawartością elementów w magazynie danych.This topic describes how to create a Windows PowerShell provider that enables the user to manipulate the contents of the items in a data store. W związku z tym dostawca, który może manipulować zawartością elementów, jest określany jako dostawca zawartości programu Windows PowerShell.As a consequence, a provider that can manipulate the contents of items is referred to as a Windows PowerShell content provider.

Uwaga

Plik źródłowy C# (AccessDBSampleProvider06.cs) dla tego dostawcy można pobrać przy użyciu zestawu Microsoft Windows Software Development Kit dla systemów Windows Vista i .NET Framework 3,0.You can download the C# source file (AccessDBSampleProvider06.cs) for this provider using the Microsoft Windows Software Development Kit for Windows Vista and .NET Framework 3.0 Runtime Components. Aby uzyskać instrukcje dotyczące pobierania, zobacz jak zainstalować program Windows PowerShell i pobrać zestaw SDK programu Windows PowerShell.For download instructions, see How to Install Windows PowerShell and Download the Windows PowerShell SDK. Pobrane pliki źródłowe są dostępne w <PowerShell Samples> katalogu.The downloaded source files are available in the <PowerShell Samples> directory. Aby uzyskać więcej informacji na temat innych implementacji dostawcy środowiska Windows PowerShell, zobacz projektowanie dostawcy środowiska Windows PowerShell.For more information about other Windows PowerShell provider implementations, see Designing Your Windows PowerShell Provider.

Definiowanie klasy dostawcy zawartości programu Windows PowerShellDefine the Windows PowerShell Content Provider Class

Dostawca zawartości programu Windows PowerShell musi utworzyć klasę .NET, która obsługuje interfejs System. Management. Automation. Provider. Icontentcmdletprovider .A Windows PowerShell content provider must create a .NET class that supports the System.Management.Automation.Provider.Icontentcmdletprovider interface. Oto definicja klasy dla dostawcy elementów opisana w tej sekcji.Here is the class definition for the item provider described in this section.

[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : NavigationCmdletProvider, IContentCmdletProvider

Należy zauważyć, że w tej definicji klasy atrybut System. Management. Automation. Provider. Cmdletproviderattribute zawiera dwa parametry.Note that in this class definition, the System.Management.Automation.Provider.Cmdletproviderattribute attribute includes two parameters. Pierwszy parametr określa przyjazną dla użytkownika nazwę dostawcy, który jest używany przez program Windows PowerShell.The first parameter specifies a user-friendly name for the provider that is used by Windows PowerShell. Drugi parametr określa funkcje programu Windows PowerShell, które dostawca uwidacznia środowisko uruchomieniowe środowiska Windows PowerShell podczas przetwarzania polecenia.The second parameter specifies the Windows PowerShell specific capabilities that the provider exposes to the Windows PowerShell runtime during command processing. Dla tego dostawcy nie dodano żadnych określonych funkcji programu Windows PowerShell.For this provider, there are no added Windows PowerShell specific capabilities.

Zdefiniuj funkcję klasy bazowejDefine Functionality of Base Class

Zgodnie z opisem w artykule projektowanie dostawcy programu Windows PowerShell, Klasa System. Management. Automation. Provider. Navigationcmdletprovider pochodzi z kilku innych klas, które udostępniają różne funkcje dostawcy.As described in Design Your Windows PowerShell Provider, the System.Management.Automation.Provider.Navigationcmdletprovider class derives from several other classes that provided different provider functionality. W związku z tym dostawca zawartości programu Windows PowerShell zwykle definiuje wszystkie funkcje udostępniane przez te klasy.A Windows PowerShell content provider, therefore, typically defines all of the functionality provided by those classes.

Aby uzyskać więcej informacji na temat implementowania funkcji dodawania informacji o inicjacji specyficznych dla sesji i zwalniania zasobów używanych przez dostawcę, zobacz Tworzenie podstawowego dostawcy środowiska Windows PowerShell.For more information about how to implement functionality for adding session-specific initialization information and for releasing resources that are used by the provider, see Creating a Basic Windows PowerShell Provider. Jednak większość dostawców, w tym opisany tutaj dostawca, może korzystać z domyślnej implementacji tej funkcji, która jest dostarczana przez program Windows PowerShell.However, most providers, including the provider described here, can use the default implementation of this functionality that is provided by Windows PowerShell.

Aby uzyskać dostęp do magazynu danych, dostawca musi zaimplementować metody klasy bazowej System. Management. Automation. Provider. Drivecmdletprovider .To access the data store, the provider must implement the methods of the System.Management.Automation.Provider.Drivecmdletprovider base class. Aby uzyskać więcej informacji na temat implementowania tych metod, zobacz Tworzenie dostawcy dysku programu Windows PowerShell.For more information about implementing these methods, see Creating a Windows PowerShell Drive Provider.

Aby manipulować elementami magazynu danych, takimi jak pobieranie, ustawianie i czyszczenie elementów, dostawca musi zaimplementować metody dostarczone przez klasę bazową System. Management. Automation. Provider. Itemcmdletprovider .To manipulate the items of a data store, such as getting, setting, and clearing items, the provider must implement the methods provided by the System.Management.Automation.Provider.Itemcmdletprovider base class. Aby uzyskać więcej informacji na temat implementowania tych metod, zobacz Tworzenie dostawcy elementów programu Windows PowerShell.For more information about implementing these methods, see Creating a Windows PowerShell Item Provider.

Aby można było korzystać z wielowarstwowych magazynów danych, dostawca musi zaimplementować metody dostarczone przez klasę bazową System. Management. Automation. Provider. Containercmdletprovider .To work on multi-layer data stores, the provider must implement the methods provided by the System.Management.Automation.Provider.Containercmdletprovider base class. Aby uzyskać więcej informacji na temat implementowania tych metod, zobacz Tworzenie dostawcy kontenera programu Windows PowerShell.For more information about implementing these methods, see Creating a Windows PowerShell Container Provider.

Aby zapewnić obsługę poleceń cyklicznych, zagnieżdżonych kontenerów i ścieżek względnych, dostawca musi zaimplementować klasę bazową System. Management. Automation. Provider. Navigationcmdletprovider .To support recursive commands, nested containers, and relative paths, the provider must implement the System.Management.Automation.Provider.Navigationcmdletprovider base class. Ponadto ten dostawca zawartości programu Windows PowerShell może dołączać Interfejs System. Management. Automation. Provider. Icontentcmdletprovider do klasy podstawowej System. Management. Automation. Provider. Navigationcmdletprovider i dlatego musi implementować metody dostarczone przez tę klasę.In addition, this Windows PowerShell content provider can attaches System.Management.Automation.Provider.Icontentcmdletprovider interface to the System.Management.Automation.Provider.Navigationcmdletprovider base class, and must therefore implement the methods provided by that class. Aby uzyskać więcej informacji, zobacz Implementowanie tych metod, zobacz wdrażanie dostawcy środowiska Windows PowerShell dla nawigacji.For more information, see implementing those methods, see Implement a Navigation Windows PowerShell Provider.

Implementowanie czytnika zawartościImplementing a Content Reader

Aby odczytać zawartość z elementu, dostawca musi implementować klasę czytnika zawartości, która pochodzi od System. Management. Automation. Provider. Icontentreader.To read content from an item, a provider must implements a content reader class that derives from System.Management.Automation.Provider.Icontentreader. Czytelnik zawartości dla tego dostawcy umożliwia dostęp do zawartości wiersza w tabeli danych.The content reader for this provider allows access to the contents of a row in a data table. Klasa czytnika zawartości definiuje metodę odczytu , która pobiera dane z wskazanego wiersza i zwraca listę reprezentującą te dane, metodę wyszukiwania , która przenosi czytnik zawartości, metodę Close , która zamyka czytelnika zawartości i metodę Dispose .The content reader class defines a Read method that retrieves the data from the indicated row and returns a list representing that data, a Seek method that moves the content reader, a Close method that closes the content reader, and a Dispose method.

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

Implementowanie składnika zapisywania zawartościImplementing a Content Writer

Aby można było napisać zawartość do elementu, dostawca musi zaimplementować klasę modułu zapisywania zawartości, która pochodzi od System. Management. Automation. Provider. Icontentwriter.To write content to an item, a provider must implement a content writer class derives from System.Management.Automation.Provider.Icontentwriter. Klasa składnika zapisywania zawartości definiuje metodę zapisu , która zapisuje określoną zawartość wiersza, metodę wyszukiwania , która przenosi składnik zapisywania zawartości, metodę Close , która zamyka składnik zapisywania zawartości, oraz metodę Dispose .The content writer class defines a Write method that writes the specified row content, a Seek method that moves the content writer, a Close method that closes the content writer, and a Dispose method.

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

Pobieranie czytnika zawartościRetrieving the Content Reader

Aby można było pobrać zawartość z elementu, dostawca musi zaimplementować System. Management. Automation. Provider. Icontentcmdletprovider. GetContentReader * , aby obsługiwał Get-Content polecenie cmdlet.To get content from an item, the provider must implement the System.Management.Automation.Provider.Icontentcmdletprovider.Getcontentreader* to support the Get-Content cmdlet. Ta metoda zwraca czytnik zawartości dla elementu znajdującego się w określonej ścieżce.This method returns the content reader for the item located at the specified path. Obiekt Reader można następnie otworzyć w celu odczytania zawartości.The reader object can then be opened to read the content.

Poniżej przedstawiono implementację elementu System. Management. Automation. Provider. Icontentcmdletprovider. GetContentReader * dla tej metody dla tego dostawcy.Here is the implementation of System.Management.Automation.Provider.Icontentcmdletprovider.Getcontentreader* for this method for this provider.

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

Zapamiętaj o implementacji GetContentReaderThings to Remember About Implementing GetContentReader

Poniższe warunki mogą dotyczyć implementacji elementu System. Management. Automation. Provider. Icontentcmdletprovider. GetContentReader *:The following conditions may apply to an implementation of System.Management.Automation.Provider.Icontentcmdletprovider.Getcontentreader*:

Dołączanie parametrów dynamicznych do polecenia cmdlet Get-ContentAttaching Dynamic Parameters to the Get-Content Cmdlet

Get-ContentPolecenie cmdlet może wymagać dodatkowych parametrów, które są określone dynamicznie w czasie wykonywania.The Get-Content cmdlet might require additional parameters that are specified dynamically at runtime. Aby zapewnić te parametry dynamiczne, dostawca zawartości programu Windows PowerShell musi zaimplementować metodę System. Management. Automation. Provider. Icontentcmdletprovider. Getcontentreaderdynamicparameters * .To provide these dynamic parameters, the Windows PowerShell content provider must implement the System.Management.Automation.Provider.Icontentcmdletprovider.Getcontentreaderdynamicparameters* method. Ta metoda pobiera parametry dynamiczne dla elementu w wskazanej ścieżce i zwraca obiekt, który ma właściwości i pola, które mają atrybuty analizy podobne do klasy poleceń cmdlet lub obiektu System. Management. Automation. Runtimedefinedparameterdictionary .This method retrieves dynamic parameters for the item at the indicated path and returns an object that has properties and fields with parsing attributes similar to a cmdlet class or a System.Management.Automation.Runtimedefinedparameterdictionary object. Środowisko uruchomieniowe programu Windows PowerShell używa zwróconego obiektu do dodawania parametrów do polecenia cmdlet.The Windows PowerShell runtime uses the returned object to add the parameters to the cmdlet.

Ten dostawca kontenera programu Windows PowerShell nie implementuje tej metody.This Windows PowerShell container provider does not implement this method. Jednak następujący kod jest domyślną implementacją tej metody.However, the following code is the default implementation of this method.

public object GetContentReaderDynamicParameters(string path)
{
    return null;
}
public object GetContentReaderDynamicParameters(string path)
{
    return null;
}

Pobieranie składnika zapisywania zawartościRetrieving the Content Writer

Aby można było napisać zawartość do elementu, dostawca musi zaimplementować System. Management. Automation. Provider. Icontentcmdletprovider. Getcontentwriter * do obsługi Set-Content Add-Content poleceń cmdlet i.To write content to an item, the provider must implement the System.Management.Automation.Provider.Icontentcmdletprovider.Getcontentwriter* to support the Set-Content and Add-Content cmdlets. Ta metoda zwraca składnik zapisywania zawartości dla elementu znajdującego się w określonej ścieżce.This method returns the content writer for the item located at the specified path.

Poniżej przedstawiono implementację elementu System. Management. Automation. Provider. Icontentcmdletprovider. Getcontentwriter * dla tej metody.Here is the implementation of System.Management.Automation.Provider.Icontentcmdletprovider.Getcontentwriter* for this method.

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);
}

Zapamiętaj o implementacji GetContentWriterThings to Remember About Implementing GetContentWriter

Poniższe warunki mogą dotyczyć implementacji elementu System. Management. Automation. Provider. Icontentcmdletprovider. Getcontentwriter *:The following conditions may apply to your implementation of System.Management.Automation.Provider.Icontentcmdletprovider.Getcontentwriter*:

Dołączanie parametrów dynamicznych do poleceń cmdlet Add-Content i Set-ContentAttaching Dynamic Parameters to the Add-Content and Set-Content Cmdlets

Add-Content Set-Content Polecenia cmdlet i mogą wymagać dodatkowych parametrów dynamicznych, które są dodawane do środowiska uruchomieniowego.The Add-Content and Set-Content cmdlets might require additional dynamic parameters that are added a runtime. Aby zapewnić te parametry dynamiczne, dostawca zawartości programu Windows PowerShell musi zaimplementować metodę System. Management. Automation. Provider. Icontentcmdletprovider. Getcontentwriterdynamicparameters * , aby obsłużyć te parametry.To provide these dynamic parameters, the Windows PowerShell content provider must implement the System.Management.Automation.Provider.Icontentcmdletprovider.Getcontentwriterdynamicparameters* method to handle these parameters. Ta metoda pobiera parametry dynamiczne dla elementu w wskazanej ścieżce i zwraca obiekt, który ma właściwości i pola, które mają atrybuty analizy podobne do klasy poleceń cmdlet lub obiektu System. Management. Automation. Runtimedefinedparameterdictionary .This method retrieves dynamic parameters for the item at the indicated path and returns an object that has properties and fields with parsing attributes similar to a cmdlet class or a System.Management.Automation.Runtimedefinedparameterdictionary object. Środowisko uruchomieniowe programu Windows PowerShell używa zwróconego obiektu do dodawania parametrów do poleceń cmdlet.The Windows PowerShell runtime uses the returned object to add the parameters to the cmdlets.

Ten dostawca kontenera programu Windows PowerShell nie implementuje tej metody.This Windows PowerShell container provider does not implement this method. Jednak następujący kod jest domyślną implementacją tej metody.However, the following code is the default implementation of this method.

public object GetContentWriterDynamicParameters(string path)
{
    return null;
}

Czyszczenie zawartościClearing Content

Dostawca zawartości implementuje metodę System. Management. Automation. Provider. Icontentcmdletprovider. ClearContent * w ramach obsługi Clear-Content polecenia cmdlet.Your content provider implements the System.Management.Automation.Provider.Icontentcmdletprovider.Clearcontent* method in support of the Clear-Content cmdlet. Ta metoda usuwa zawartość elementu w określonej ścieżce, ale pozostawia element bez zmian.This method removes the contents of the item at the specified path, but leaves the item intact.

Poniżej przedstawiono implementację metody System. Management. Automation. Provider. Icontentcmdletprovider. ClearContent * dla tego dostawcy.Here is the implementation of the System.Management.Automation.Provider.Icontentcmdletprovider.Clearcontent* method for this provider.

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

Zapamiętaj o implementacji ClearContentThings to Remember About Implementing ClearContent

Poniższe warunki mogą dotyczyć implementacji elementu System. Management. Automation. Provider. Icontentcmdletprovider. ClearContent *:The following conditions may apply to an implementation of System.Management.Automation.Provider.Icontentcmdletprovider.Clearcontent*:

Dołączanie parametrów dynamicznych do polecenia cmdlet Clear-ContentAttaching Dynamic Parameters to the Clear-Content Cmdlet

Clear-ContentPolecenie cmdlet może wymagać dodatkowych parametrów dynamicznych, które są dodawane w czasie wykonywania.The Clear-Content cmdlet might require additional dynamic parameters that are added at runtime. Aby zapewnić te parametry dynamiczne, dostawca zawartości programu Windows PowerShell musi zaimplementować metodę System. Management. Automation. Provider. Icontentcmdletprovider. Clearcontentdynamicparameters * , aby obsłużyć te parametry.To provide these dynamic parameters, the Windows PowerShell content provider must implement the System.Management.Automation.Provider.Icontentcmdletprovider.Clearcontentdynamicparameters* method to handle these parameters. Ta metoda pobiera parametry dla elementu we wskazanej ścieżce.This method retrieves the parameters for the item at the indicated path. Ta metoda pobiera parametry dynamiczne dla elementu w wskazanej ścieżce i zwraca obiekt, który ma właściwości i pola, które mają atrybuty analizy podobne do klasy poleceń cmdlet lub obiektu System. Management. Automation. Runtimedefinedparameterdictionary .This method retrieves dynamic parameters for the item at the indicated path and returns an object that has properties and fields with parsing attributes similar to a cmdlet class or a System.Management.Automation.Runtimedefinedparameterdictionary object. Środowisko uruchomieniowe programu Windows PowerShell używa zwróconego obiektu do dodawania parametrów do polecenia cmdlet.The Windows PowerShell runtime uses the returned object to add the parameters to the cmdlet.

Ten dostawca kontenera programu Windows PowerShell nie implementuje tej metody.This Windows PowerShell container provider does not implement this method. Jednak następujący kod jest domyślną implementacją tej metody.However, the following code is the default implementation of this method.

public object ClearContentDynamicParameters(string path)
{
    return null;
}
public object ClearContentDynamicParameters(string path)
{
    return null;
}

Przykładowy kodCode Sample

Aby uzyskać kompletny przykładowy kod, zobacz przykład kodu AccessDbProviderSample06.For complete sample code, see AccessDbProviderSample06 Code Sample.

Definiowanie typów i formatowania obiektówDefining Object Types and Formatting

Podczas pisania dostawcy może być konieczne dodanie elementów członkowskich do istniejących obiektów lub zdefiniowanie nowych obiektów.When writing a provider, it may be necessary to add members to existing objects or define new objects. Gdy to zrobisz, musisz utworzyć plik typów, który może być używany przez program Windows PowerShell do identyfikowania elementów członkowskich obiektu i pliku formatu, który definiuje sposób wyświetlania obiektu.When this is done, you must create a Types file that Windows PowerShell can use to identify the members of the object and a Format file that defines how the object is displayed. Aby uzyskać więcej informacji, zobacz rozszerzanie typów obiektów i formatowanie.For more information, see Extending Object Types and Formatting.

Kompilowanie dostawcy środowiska Windows PowerShellBuilding the Windows PowerShell Provider

Zobacz , jak zarejestrować polecenia cmdlet, dostawców i aplikacje hosta.See How to Register Cmdlets, Providers, and Host Applications.

Testowanie dostawcy programu Windows PowerShellTesting the Windows PowerShell Provider

Gdy dostawca środowiska Windows PowerShell został zarejestrowany w programie Windows PowerShell, można go przetestować, uruchamiając obsługiwane polecenia cmdlet w wierszu polecenia.When your Windows PowerShell provider has been registered with Windows PowerShell, you can test it by running the supported cmdlets on the command line. Na przykład Przetestuj przykładowego dostawcę zawartości.For example, test the sample content provider.

Użyj Get-Content polecenia cmdlet, aby pobrać zawartość określonego elementu z tabeli bazy danych w ścieżce określonej przez Path parametr.Use the Get-Content cmdlet to retrieve the contents of specified item in the database table at the path specified by the Path parameter. ReadCountParametr określa liczbę elementów dla zdefiniowanego czytnika zawartości do odczytania (domyślnie 1).The ReadCount parameter specifies the number of items for the defined content reader to read (default 1). Polecenie cmdlet pobiera dwa wiersze (elementy) z tabeli i wyświetla ich zawartość przy użyciu następującego polecenia.With the following command entry, the cmdlet retrieves two rows (items) from the table and displays their contents. Należy zauważyć, że Poniższe przykładowe dane wyjściowe używają fikcyjnej bazy danych programu Access.Note that the following example output uses a fictitious Access database.

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

Zobacz teżSee Also

Tworzenie dostawców programu Windows PowerShellCreating Windows PowerShell providers

Projektowanie dostawcy środowiska Windows PowerShellDesign Your Windows PowerShell provider

Rozszerzanie typów i formatowania obiektówExtending Object Types and Formatting

Implementowanie dostawcy nawigacji programu Windows PowerShellImplement a Navigation Windows PowerShell provider

Jak zarejestrować polecenia cmdlet, dostawców i aplikacje hostaHow to Register Cmdlets, Providers, and Host Applications

Windows PowerShell SDKWindows PowerShell SDK

Windows PowerShell — przewodnik programistyWindows PowerShell Programmer's Guide