Windows PowerShelles tárolószolgáltató létrehozásaCreating a Windows PowerShell Container Provider

Ez a témakör azt ismerteti, hogyan hozható létre olyan Windows PowerShell-szolgáltató, amely többrétegű adattárakon is működhet.This topic describes how to create a Windows PowerShell provider that can work on multi-layer data stores. Az ilyen típusú adattár esetében a tároló legfelső szintje tartalmazza a legfelső szintű elemeket, és minden további szintet alárendelt elemek csomópontjának nevezzük.For this type of data store, the top level of the store contains the root items and each subsequent level is referred to as a node of child items. A felhasználók ezen alárendelt csomópontokon való működésének engedélyezésével a felhasználók hierarchikusan kezelhetik az adattárban.By allowing the user to work on these child nodes, a user can interact hierarchically through the data store.

A többszintű adattárakon működhető szolgáltatókat Windows PowerShell-tároló szolgáltatóknak nevezzük.Providers that can work on multi-level data stores are referred to as Windows PowerShell container providers. Vegye azonban figyelembe, hogy a Windows PowerShell-tároló szolgáltatója csak akkor használható, ha egy tároló (nincs beágyazott tároló) elemekkel rendelkezik.However, be aware that a Windows PowerShell container provider can be used only when there is one container (no nested containers) with items in it. Beágyazott tárolók esetén a Windows PowerShell navigációs szolgáltatót kell létrehoznia.If there are nested containers, then you must implement a Windows PowerShell navigation provider. A Windows PowerShell navigációs szolgáltató megvalósításával kapcsolatos további információkért lásd: Windows PowerShell navigációs szolgáltató létrehozása.For more information about implementing Windows PowerShell navigation provider, see Creating a Windows PowerShell Navigation Provider.

Megjegyzés

A szolgáltatóhoz tartozó C#-forrásfájl (AccessDBSampleProvider04.cs) a Windows Vista és a .NET Framework 3,0 Runtime Components Microsoft Windows szoftverfejlesztői készletének használatával tölthető le.You can download the C# source file (AccessDBSampleProvider04.cs) for this provider using the Microsoft Windows Software Development Kit for Windows Vista and .NET Framework 3.0 Runtime Components. A letöltési utasításokért lásd: a Windows PowerShell telepítése és a Windows POWERSHELL SDK letöltése.For download instructions, see How to Install Windows PowerShell and Download the Windows PowerShell SDK. A letöltött forrásfájlok a címtárban érhetők el <PowerShell Samples> .The downloaded source files are available in the <PowerShell Samples> directory. További információ a Windows PowerShell-szolgáltatók egyéb implementációkkal kapcsolatban: a Windows PowerShell-szolgáltató megtervezése.For more information about other Windows PowerShell provider implementations, see Designing Your Windows PowerShell Provider.

Az itt ismertetett Windows PowerShell-tároló szolgáltató egyetlen tárolóként határozza meg az adatbázist, a tároló elemeiként definiált adatbázis tábláival és soraival együtt.The Windows PowerShell container provider described here defines the database as its single container, with the tables and rows of the database defined as items of the container.

Figyelemfelhívás

Ügyeljen arra, hogy ez a kialakítás egy olyan adatbázist feltételez, amelynek a neve AZONOSÍTÓval rendelkezik, és hogy a mező típusa LongInteger.Be aware that this design assumes a database that has a field with the name ID, and that the type of the field is LongInteger.

Windows PowerShell-tároló szolgáltatói osztályának meghatározásaDefining a Windows PowerShell Container Provider Class

A Windows PowerShell-tároló szolgáltatójának meg kell határoznia a System. Management. Automation. Provider. Containercmdletprovider alaposztályból származtatott .net-osztályt.A Windows PowerShell container provider must define a .NET class that derives from the System.Management.Automation.Provider.Containercmdletprovider base class. Itt látható az ebben a részben ismertetett Windows PowerShell-tároló szolgáltatójának osztály-definíciója.Here is the class definition for the Windows PowerShell container provider described in this section.

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

Figyelje meg, hogy ebben az osztályban a System. Management. Automation. Provider. Cmdletproviderattribute attribútum két paramétert tartalmaz.Notice that in this class definition, the System.Management.Automation.Provider.Cmdletproviderattribute attribute includes two parameters. Az első paraméter a Windows PowerShell által használt szolgáltató felhasználóbarát nevét adja meg.The first parameter specifies a user-friendly name for the provider that is used by Windows PowerShell. A második paraméter azt a Windows PowerShell-specifikus képességeket határozza meg, amelyeket a szolgáltató a parancs feldolgozásakor a Windows PowerShell futtatókörnyezet számára tesz elérhetővé.The second parameter specifies the Windows PowerShell specific capabilities that the provider exposes to the Windows PowerShell runtime during command processing. Ennél a szolgáltatónál nincsenek hozzáadott Windows PowerShell-képességek.For this provider, there are no Windows PowerShell specific capabilities that are added.

Alapfunkciók meghatározásaDefining Base Functionality

A Windows PowerShell-szolgáltató megtervezésecímű témakörben leírtak szerint a System. Management. Automation. Provider. Containercmdletprovider osztály számos más osztályból származik, amelyek különböző szolgáltatói funkciókat biztosítanak.As described in Designing Your Windows PowerShell Provider, the System.Management.Automation.Provider.Containercmdletprovider class derives from several other classes that provided different provider functionality. A Windows PowerShell-tároló szolgáltatójának ezért meg kell határoznia az osztályok által biztosított összes funkciót.A Windows PowerShell container provider, therefore, needs to define all of the functionality provided by those classes.

A munkamenet-specifikus inicializálási információk hozzáadásához és a szolgáltató által használt erőforrások felszabadításához szükséges funkciók megvalósításához tekintse meg az alapszintű Windows PowerShell-szolgáltató létrehozásacímű témakört.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. Azonban a legtöbb szolgáltató (beleértve az itt leírt szolgáltatót is) használhatja a Windows PowerShell által biztosított funkció alapértelmezett implementációját.However, most providers (including the provider described here) can use the default implementation of this functionality that is provided by Windows PowerShell.

Az adattárhoz való hozzáféréshez a szolgáltatónak meg kell valósítania a System. Management. Automation. Provider. Drivecmdletprovider alaposztály metódusait.To get access to the data store, the provider must implement the methods of the System.Management.Automation.Provider.Drivecmdletprovider base class. A módszerek végrehajtásával kapcsolatos további információkért lásd: Windows PowerShell meghajtó-szolgáltató létrehozása.For more information about implementing these methods, see Creating an Windows PowerShell Drive Provider.

Az adattár elemeinek (például a beolvasási, beállítási és törlési elemek) kezeléséhez a szolgáltatónak meg kell valósítania a System. Management. Automation. Provider. Itemcmdletprovider alaposztály által megadott metódusokat.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. A módszerek végrehajtásával kapcsolatos további információkért lásd: Windows PowerShell-elem szolgáltatójának létrehozása.For more information about implementing these methods, see Creating an Windows PowerShell Item Provider.

Alárendelt elemek beolvasásaRetrieving Child Items

Egy alárendelt elem lekéréséhez a Windows PowerShell-tároló szolgáltatójának felül kell bírálnia a System. Management. Automation. Provider. Containercmdletprovider. Getchilditems * metódust a parancsmagtól érkező hívások támogatásához. Get-ChildItemTo retrieve a child item, the Windows PowerShell container provider must override the System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* method to support calls from the Get-ChildItem cmdlet. Ez a metódus lekérdezi a gyermek elemeket az adattárból, és objektumokként írja azokat a folyamatba.This method retrieves child items from the data store and writes them to the pipeline as objects. Ha meg recurse van adva a parancsmag paramétere, a metódus minden gyermeket lekérdez, függetlenül attól, hogy milyen szinten vannak.If the recurse parameter of the cmdlet is specified, the method retrieves all children regardless of what level they are at. Ha a recurse paraméter nincs megadva, a metódus csak egyetlen szintű gyermeket kérdez le.If the recurse parameter is not specified, the method retrieves only a single level of children.

Itt látható a System. Management. Automation. Provider. Containercmdletprovider. Getchilditems * metódus implementálása ehhez a szolgáltatóhoz.Here is the implementation of the System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* method for this provider. Figyelje meg, hogy ez a metódus az összes adatbázis-táblában lekéri a gyermek elemeket, ha az elérési út jelzi az Access-adatbázist, és az adott tábla soraiból kéri le a gyermek elemeket, ha az elérési út egy adattáblát jelez.Notice that this method retrieves the child items in all database tables when the path indicates the Access database, and retrieves the child items from the rows of that table if the path indicates a data table.

protected override void GetChildItems(string path, bool recurse)
{
    // If path represented is a drive then the children in the path are
    // tables. Hence all tables in the drive represented will have to be
    // returned
    if (PathIsDrive(path))
    {
        foreach (DatabaseTableInfo table in GetTables())
        {
            WriteItemObject(table, path, true);

            // if the specified item exists and recurse has been set then
            // all child items within it have to be obtained as well
            if (ItemExists(path) && recurse)
            {
                GetChildItems(path + pathSeparator + table.Name, recurse);
            }
        } // foreach (DatabaseTableInfo...
    } // if (PathIsDrive...
    else
    {
        // Get the table name, row number and type of path from the
        // path specified
        string tableName;
        int rowNumber;

        PathType type = GetNamesFromPath(path, out tableName, out rowNumber);

        if (type == PathType.Table)
        {
            // Obtain all the rows within the table
            foreach (DatabaseRowInfo row in GetRows(tableName))
            {
                WriteItemObject(row, path + pathSeparator + row.RowNumber,
                        false);
            } // foreach (DatabaseRowInfo...
        }
        else if (type == PathType.Row)
        {
            // In this case the user has directly specified a row, hence
            // just give that particular row
            DatabaseRowInfo row = GetRow(tableName, rowNumber);
            WriteItemObject(row, path + pathSeparator + row.RowNumber,
                        false);
        }
        else
        {
            // In this case, the path specified is not valid
            ThrowTerminatingInvalidPathException(path);
        }
    } // else
} // GetChildItems
protected override void GetChildItems(string path, bool recurse)
{
    // If path represented is a drive then the children in the path are 
    // tables. Hence all tables in the drive represented will have to be
    // returned
    if (PathIsDrive(path))
    {
        foreach (DatabaseTableInfo table in GetTables())
        {
            WriteItemObject(table, path, true);

            // if the specified item exists and recurse has been set then 
            // all child items within it have to be obtained as well
            if (ItemExists(path) && recurse)
            {
                GetChildItems(path + pathSeparator + table.Name, recurse);
            }
        } // foreach (DatabaseTableInfo...
    } // if (PathIsDrive...
    else
    {
        // Get the table name, row number and type of path from the
        // path specified
        string tableName;
        int rowNumber;

        PathType type = GetNamesFromPath(path, out tableName, out rowNumber);

        if (type == PathType.Table)
        {
            // Obtain all the rows within the table
            foreach (DatabaseRowInfo row in GetRows(tableName))
            {
                WriteItemObject(row, path + pathSeparator + row.RowNumber,
                        false);
            } // foreach (DatabaseRowInfo...
        }
        else if (type == PathType.Row)
        {
            // In this case the user has directly specified a row, hence
            // just give that particular row
            DatabaseRowInfo row = GetRow(tableName, rowNumber);
            WriteItemObject(row, path + pathSeparator + row.RowNumber,
                        false);
        }
        else
        {
            // In this case, the path specified is not valid
            ThrowTerminatingInvalidPathException(path);
        }
    } // else
} // GetChildItems

A GetChildItems megvalósításának tudnivalóiThings to Remember About Implementing GetChildItems

A következő feltételek vonatkozhatnak a System. Management. Automation. Provider. Containercmdletprovider. Getchilditems *megvalósítására:The following conditions may apply to your implementation of System.Management.Automation.Provider.Containercmdletprovider.Getchilditems*:

Dinamikus paraméterek csatolása a Get-ChildItem parancsmaghozAttaching Dynamic Parameters to the Get-ChildItem Cmdlet

Néha a Get-ChildItem System. Management. Automation. Provider. Containercmdletprovider. Getchilditems * metódust meghívó parancsmaghoz további, futásidőben megadott paramétereket kell megadni.Sometimes the Get-ChildItem cmdlet that calls System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* requires additional parameters that are specified dynamically at runtime. A dinamikus paraméterek megadásához a Windows PowerShell-tároló szolgáltatójának meg kell valósítania a System. Management. Automation. Provider. Containercmdletprovider. Getchilditemsdynamicparameters * metódust.To provide these dynamic parameters, the Windows PowerShell container provider must implement the System.Management.Automation.Provider.Containercmdletprovider.Getchilditemsdynamicparameters* method. Ezzel a módszerrel lekéri a megadott elérési úton található elem dinamikus paramétereit, és egy olyan objektumot ad vissza, amely a parancsmag osztályához vagy a System. Management. Automation. Runtimedefinedparameterdictionary objektumhoz hasonló tulajdonságokat és mezőket tartalmaz.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. A Windows PowerShell futtatókörnyezet a visszaadott objektum használatával adja hozzá a paramétereket a Get-ChildItem parancsmaghoz.The Windows PowerShell runtime uses the returned object to add the parameters to the Get-ChildItem cmdlet.

Ez a Windows PowerShell-tároló szolgáltatója nem valósítja meg ezt a metódust.This Windows PowerShell container provider does not implement this method. Az alábbi kód azonban a metódus alapértelmezett implementációja.However, the following code is the default implementation of this method.

Alárendelt elemek neveinek beolvasásaRetrieving Child Item Names

Az alárendelt elemek nevének lekéréséhez a Windows PowerShell-tároló szolgáltatójának felül kell bírálnia a System. Management. Automation. Provider. Containercmdletprovider. Getchildnames * metódust, hogy támogassa a parancsmagtól érkező hívásokat a paraméter megadásakor Get-ChildItem Name .To retrieve the names of child items, the Windows PowerShell container provider must override the System.Management.Automation.Provider.Containercmdletprovider.Getchildnames* method to support calls from the Get-ChildItem cmdlet when its Name parameter is specified. Ezzel a módszerrel a rendszer a megadott elérési úthoz vagy alárendelt elemekhez tartozó alárendelt elemek nevét kérdezi le, ha a returnAllContainers parancsmag paraméterét megadja.This method retrieves the names of the child items for the specified path or child item names for all containers if the returnAllContainers parameter of the cmdlet is specified. A gyermek neve egy elérési út levél részét képezi.A child name is the leaf portion of a path. Például az elérési út gyermekének neve c:\windows\system32\abc.dll "abc.dll".For example, the child name for the path c:\windows\system32\abc.dll is "abc.dll". A könyvtár neve a következő: "system32".The child name for the directory c:\windows\system32 is "system32".

Itt látható a System. Management. Automation. Provider. Containercmdletprovider. Getchildnames * metódus implementálása ehhez a szolgáltatóhoz.Here is the implementation of the System.Management.Automation.Provider.Containercmdletprovider.Getchildnames* method for this provider. Figyelje meg, hogy a metódus lekérdezi a táblázat nevét, ha a megadott elérési út azt jelzi, hogy a hozzáférési adatbázis (meghajtó) és a sorok száma, ha az elérési út tábla.Notice that the method retrieves table names if the specified path indicates the Access database (drive) and row numbers if the path indicates a table.

protected override void GetChildNames(string path,
                            ReturnContainers returnContainers)
{
    // If the path represented is a drive, then the child items are
    // tables. get the names of all the tables in the drive.
    if (PathIsDrive(path))
    {
        foreach (DatabaseTableInfo table in GetTables())
        {
            WriteItemObject(table.Name, path, true);
        } // foreach (DatabaseTableInfo...
    } // if (PathIsDrive...
    else
    {
        // Get type, table name and row number from path specified
        string tableName;
        int rowNumber;

        PathType type = GetNamesFromPath(path, out tableName, out rowNumber);

        if (type == PathType.Table)
        {
            // Get all the rows in the table and then write out the
            // row numbers.
            foreach (DatabaseRowInfo row in GetRows(tableName))
            {
                WriteItemObject(row.RowNumber, path, false);
            } // foreach (DatabaseRowInfo...
        }
        else if (type == PathType.Row)
        {
            // In this case the user has directly specified a row, hence
            // just give that particular row
            DatabaseRowInfo row = GetRow(tableName, rowNumber);

            WriteItemObject(row.RowNumber, path, false);
        }
        else
        {
            ThrowTerminatingInvalidPathException(path);
        }
    } // else
} // GetChildNames
protected override void GetChildNames(string path,
                              ReturnContainers returnContainers)
{
    // If the path represented is a drive, then the child items are
    // tables. get the names of all the tables in the drive.
    if (PathIsDrive(path))
    {
        foreach (DatabaseTableInfo table in GetTables())
        {
            WriteItemObject(table.Name, path, true);
        } // foreach (DatabaseTableInfo...
    } // if (PathIsDrive...
    else
    {
        // Get type, table name and row number from path specified
        string tableName;
        int rowNumber;

        PathType type = GetNamesFromPath(path, out tableName, out rowNumber);

        if (type == PathType.Table)
        {
            // Get all the rows in the table and then write out the 
            // row numbers.
            foreach (DatabaseRowInfo row in GetRows(tableName))
            {
                WriteItemObject(row.RowNumber, path, false);
            } // foreach (DatabaseRowInfo...
        }
        else if (type == PathType.Row)
        {
            // In this case the user has directly specified a row, hence
            // just give that particular row
            DatabaseRowInfo row = GetRow(tableName, rowNumber);

            WriteItemObject(row.RowNumber, path, false);
        }
        else
        {
            ThrowTerminatingInvalidPathException(path);
        }
    } // else
} // GetChildNames

A GetChildNames megvalósításának tudnivalóiThings to Remember About Implementing GetChildNames

A következő feltételek vonatkozhatnak a System. Management. Automation. Provider. Containercmdletprovider. Getchilditems *megvalósítására:The following conditions may apply to your implementation of System.Management.Automation.Provider.Containercmdletprovider.Getchilditems*:

Dinamikus paraméterek csatolása a Get-ChildItem parancsmaghoz (név)Attaching Dynamic Parameters to the Get-ChildItem Cmdlet (Name)

Időnként a Get-ChildItem parancsmagnak (a Name paraméterrel) további, a futásidőben megadott paramétereket kell megadnia.Sometimes the Get-ChildItem cmdlet (with the Name parameter) requires additional parameters that are specified dynamically at runtime. A dinamikus paraméterek megadásához a Windows PowerShell-tároló szolgáltatójának meg kell valósítania a System. Management. Automation. Provider. Containercmdletprovider. Getchildnamesdynamicparameters * metódust.To provide these dynamic parameters, the Windows PowerShell container provider must implement the System.Management.Automation.Provider.Containercmdletprovider.Getchildnamesdynamicparameters* method. Ez a metódus lekérdezi a megadott elérési úton lévő elem dinamikus paramétereit, és egy olyan objektumot ad vissza, amely a parancsmag osztályához vagy a System. Management. Automation. Runtimedefinedparameterdictionary objektumhoz hasonló tulajdonságokkal rendelkezik.This method retrieves the 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. A Windows PowerShell futtatókörnyezet a visszaadott objektum használatával adja hozzá a paramétereket a Get-ChildItem parancsmaghoz.The Windows PowerShell runtime uses the returned object to add the parameters to the Get-ChildItem cmdlet.

Ez a szolgáltató nem valósítja meg ezt a metódust.This provider does not implement this method. Az alábbi kód azonban a metódus alapértelmezett implementációja.However, the following code is the default implementation of this method.

Elemek átnevezéseRenaming Items

Egy elem átnevezéséhez a Windows PowerShell-tároló szolgáltatójának felül kell bírálnia a System. Management. Automation. Provider. Containercmdletprovider. Renameitem * metódust a parancsmagtól érkező hívások támogatásához. Rename-ItemTo rename an item, a Windows PowerShell container provider must override the System.Management.Automation.Provider.Containercmdletprovider.Renameitem* method to support calls from the Rename-Item cmdlet. Ez a metódus a megadott elérési úton lévő objektum nevét módosítja az új névre.This method changes the name of the item at the specified path to the new name provided. Az új névnek mindig a fölérendelt elemhez (tárolóhoz) viszonyítva kell lennie.The new name must always be relative to the parent item (container).

Ez a szolgáltató nem bírálja felül a System. Management. Automation. Provider. Containercmdletprovider. Renameitem * metódust.This provider does not override the System.Management.Automation.Provider.Containercmdletprovider.Renameitem* method. Az alapértelmezett implementáció azonban az alábbi.However, the following is the default implementation.

A RenameItem megvalósításának tudnivalóiThings to Remember About Implementing RenameItem

A következő feltételek vonatkozhatnak a System. Management. Automation. Provider. Containercmdletprovider. Renameitem *megvalósítására:The following conditions may apply to your implementation of System.Management.Automation.Provider.Containercmdletprovider.Renameitem*:

Dinamikus paraméterek csatolása a Rename-Item parancsmaghozAttaching Dynamic Parameters to the Rename-Item Cmdlet

Időnként a Rename-Item parancsmaghoz további, a futásidőben megadott paramétereket kell megadni.Sometimes the Rename-Item cmdlet requires additional parameters that are specified dynamically at runtime. A dinamikus paraméterek megadásához a Windows PowerShell-tároló szolgáltatójának meg kell valósítania a System. Management. Automation. Provider. Containercmdletprovider. Renameitemdynamicparameters * metódust.To provide these dynamic parameters, Windows PowerShell container provider must implement the System.Management.Automation.Provider.Containercmdletprovider.Renameitemdynamicparameters* method. Ez a metódus lekérdezi a megadott elérési úton található elem paramétereit, és egy olyan objektumot ad vissza, amely a parancsmag osztályához vagy a System. Management. Automation. Runtimedefinedparameterdictionary objektumhoz hasonló tulajdonságokkal rendelkező tulajdonságokat és mezőket tartalmaz.This method retrieves the 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. A Windows PowerShell futtatókörnyezet a visszaadott objektum használatával adja hozzá a paramétereket a Rename-Item parancsmaghoz.The Windows PowerShell runtime uses the returned object to add the parameters to the Rename-Item cmdlet.

Ez a tároló-szolgáltató nem valósítja meg ezt a metódust.This container provider does not implement this method. Az alábbi kód azonban a metódus alapértelmezett implementációja.However, the following code is the default implementation of this method.

Új elemek létrehozásaCreating New Items

Új elemek létrehozásához a tároló szolgáltatójának meg kell valósítania a System. Management. Automation. Provider. Containercmdletprovider. Newitem * metódust a parancsmagtól érkező hívások támogatásához. New-ItemTo create new items, a container provider must implement the System.Management.Automation.Provider.Containercmdletprovider.Newitem* method to support calls from the New-Item cmdlet. Ez a metódus egy, a megadott elérési úton található adattételt hoz létre.This method creates a data item located at the specified path. A type parancsmag paramétere az új elemmel a szolgáltató által definiált típust tartalmazza.The type parameter of the cmdlet contains the provider-defined type for the new item. A fájlrendszer-szolgáltató például egy type "fájl" vagy "könyvtár" értékű paramétert használ.For example, the FileSystem provider uses a type parameter with a value of "file" or "directory". A newItemValue parancsmag paramétere az új elemmel kapcsolatos szolgáltatóra jellemző értéket határozza meg.The newItemValue parameter of the cmdlet specifies a provider-specific value for the new item.

Itt látható a System. Management. Automation. Provider. Containercmdletprovider. Newitem * metódus implementálása ehhez a szolgáltatóhoz.Here is the implementation of the System.Management.Automation.Provider.Containercmdletprovider.Newitem* method for this provider.

protected override void NewItem( string path, string type, object newItemValue )
{
    // Create the new item here after
    // performing necessary validations
    //
    // WriteItemObject(newItemValue, path, false);

    // Example
    //
    // if (ShouldProcess(path, "new item"))
    // {
    //      // Create a new item and then call WriteObject
    //      WriteObject(newItemValue, path, false);
    // }

} // NewItem
{
    case 1:
        {
            string name = pathChunks[0];

            if (TableNameIsValid(name))
            {
                tableName = name;
                retVal = PathType.Table;
            }
        }
        break;

    case 2:
        {
            string name = pathChunks[0];

A NewItem megvalósításának tudnivalóiThings to Remember About Implementing NewItem

A következő feltételek vonatkozhatnak a System. Management. Automation. Provider. Containercmdletprovider. Newitem *megvalósítására:The following conditions may apply to your implementation of System.Management.Automation.Provider.Containercmdletprovider.Newitem*:

Dinamikus paraméterek csatolása a New-Item parancsmaghozAttaching Dynamic Parameters to the New-Item Cmdlet

Időnként a New-Item parancsmaghoz további, a futásidőben megadott paramétereket kell megadni.Sometimes the New-Item cmdlet requires additional parameters that are specified dynamically at runtime. A dinamikus paraméterek megadásához a tároló szolgáltatójának meg kell valósítania a System. Management. Automation. Provider. Containercmdletprovider. Newitemdynamicparameters * metódust.To provide these dynamic parameters, the container provider must implement the System.Management.Automation.Provider.Containercmdletprovider.Newitemdynamicparameters* method. Ez a metódus lekérdezi a megadott elérési úton található elem paramétereit, és egy olyan objektumot ad vissza, amely a parancsmag osztályához vagy a System. Management. Automation. Runtimedefinedparameterdictionary objektumhoz hasonló tulajdonságokkal rendelkező tulajdonságokat és mezőket tartalmaz.This method retrieves the 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. A Windows PowerShell futtatókörnyezet a visszaadott objektum használatával adja hozzá a paramétereket a New-Item parancsmaghoz.The Windows PowerShell runtime uses the returned object to add the parameters to the New-Item cmdlet.

Ez a szolgáltató nem valósítja meg ezt a metódust.This provider does not implement this method. Az alábbi kód azonban a metódus alapértelmezett implementációja.However, the following code is the default implementation of this method.

Elemek eltávolításaRemoving Items

Az elemek eltávolításához a Windows PowerShell-szolgáltatónak felül kell bírálnia a System. Management. Automation. Provider. Containercmdletprovider. RemoveItem * metódust a parancsmagtól érkező hívások támogatásához. Remove-ItemTo remove items, the Windows PowerShell provider must override the System.Management.Automation.Provider.Containercmdletprovider.Removeitem* method to support calls from the Remove-Item cmdlet. Ez a metódus töröl egy elemet az adattárból a megadott elérési úton.This method deletes an item from the data store at the specified path. Ha a recurse parancsmag paraméterét a értékre Remove-Item állítja true , a metódus eltávolítja az összes alárendelt elemet a szintjétől függetlenül.If the recurse parameter of the Remove-Item cmdlet is set to true, the method removes all child items regardless of their level. Ha a paraméter értéke false , a metódus csak egyetlen elemből távolítja el a megadott elérési utat.If the parameter is set to false, the method removes only a single item at the specified path.

Ez a szolgáltató nem támogatja az elemek eltávolítását.This provider does not support item removal. A következő kód azonban a System. Management. Automation. Provider. Containercmdletprovider. RemoveItem *alapértelmezett implementációja.However, the following code is the default implementation of System.Management.Automation.Provider.Containercmdletprovider.Removeitem*.

A RemoveItem megvalósításának tudnivalóiThings to Remember About Implementing RemoveItem

A következő feltételek vonatkozhatnak a System. Management. Automation. Provider. Containercmdletprovider. Newitem *megvalósítására:The following conditions may apply to your implementation of System.Management.Automation.Provider.Containercmdletprovider.Newitem*:

Dinamikus paraméterek csatolása a Remove-Item parancsmaghozAttaching Dynamic Parameters to the Remove-Item Cmdlet

Időnként a Remove-Item parancsmaghoz további, a futásidőben megadott paramétereket kell megadni.Sometimes the Remove-Item cmdlet requires additional parameters that are specified dynamically at runtime. A dinamikus paraméterek megadásához a tároló szolgáltatójának meg kell valósítania a System. Management. Automation. Provider. Containercmdletprovider. Removeitemdynamicparameters * metódust a paraméterek kezelésére.To provide these dynamic parameters, the container provider must implement the System.Management.Automation.Provider.Containercmdletprovider.Removeitemdynamicparameters* method to handle these parameters. Ez a metódus lekérdezi a megadott elérési úton lévő elem dinamikus paramétereit, és egy olyan objektumot ad vissza, amely a parancsmag osztályához vagy a System. Management. Automation. Runtimedefinedparameterdictionary objektumhoz hasonló tulajdonságokkal rendelkezik.This method retrieves the 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. A Windows PowerShell futtatókörnyezet a visszaadott objektum használatával adja hozzá a paramétereket a Remove-Item parancsmaghoz.The Windows PowerShell runtime uses the returned object to add the parameters to the Remove-Item cmdlet.

Ez a tároló-szolgáltató nem valósítja meg ezt a metódust.This container provider does not implement this method. A következő kód azonban a System. Management. Automation. Provider. Containercmdletprovider. Removeitemdynamicparameters *alapértelmezett implementációja.However, the following code is the default implementation of System.Management.Automation.Provider.Containercmdletprovider.Removeitemdynamicparameters*.

Alárendelt elemek lekérdezéseQuerying for Child Items

Ha szeretné megtekinteni, hogy a gyermek elemek léteznek-e a megadott elérési úton, a Windows PowerShell-tároló szolgáltatójának felül kell bírálnia a System. Management. Automation. Provider. Containercmdletprovider. Haschilditems * metódust.To check to see if child items exist at the specified path, the Windows PowerShell container provider must override the System.Management.Automation.Provider.Containercmdletprovider.Haschilditems* method. Ez a metódus true akkor tér vissza, ha az elem gyermekekkel rendelkezik, és false egyéb módon.This method returns true if the item has children, and false otherwise. Null vagy üres elérési út esetén a metódus az adattár összes elemét gyermekeknek tekinti és visszaadja true .For a null or empty path, the method considers any items in the data store to be children and returns true.

Itt látható a System. Management. Automation. Provider. Containercmdletprovider. Haschilditems * metódus felülbírálása.Here is the override for the System.Management.Automation.Provider.Containercmdletprovider.Haschilditems* method. Ha a ChunkPath Helper metódus több mint két elérési úttal rendelkezik, a metódus visszatér false , mivel csak egy adatbázis-tároló és egy tábla-tároló van definiálva.If there are more than two path parts created by the ChunkPath helper method, the method returns false, since only a database container and a table container are defined. További információ erről a segítő módszerről: a Windows PowerShell-ChunkPath módszere.For more information about this helper method, see the ChunkPath method is discussed in Creating a Windows PowerShell Item Provider.

protected override bool HasChildItems( string path )
{
    return false;
} // HasChildItems
        ErrorCategory.InvalidOperation, tableName));
}

return results;

A HasChildItems megvalósításának tudnivalóiThings to Remember About Implementing HasChildItems

A következő feltételek vonatkozhatnak a System. Management. Automation. Provider. Containercmdletprovider. Haschilditems *megvalósítására:The following conditions may apply to your implementation of System.Management.Automation.Provider.Containercmdletprovider.Haschilditems*:

Elemek másolásaCopying Items

Az elemek másolásához a tároló szolgáltatójának meg kell valósítania a System. Management. Automation. Provider. ContainerCmdletProvider. CopyItem metódust a parancsmag által kezdeményezett hívások támogatásához. Copy-ItemTo copy items, the container provider must implement the System.Management.Automation.Provider.ContainerCmdletProvider.CopyItem method to support calls from the Copy-Item cmdlet. Ez a metódus a parancsmag paraméterében jelzett helyről másol egy adatelemet path a paraméter által jelzett helyre copyPath .This method copies a data item from the location indicated by the path parameter of the cmdlet to the location indicated by the copyPath parameter. Ha a recurse paraméter meg van adva, a metódus az összes altárolót átmásolja.If the recurse parameter is specified, the method copies all sub-containers. Ha a paraméter nincs megadva, a metódus csak egyetlen szintű elemet másol.If the parameter is not specified, the method copies only a single level of items.

Ez a szolgáltató nem valósítja meg ezt a metódust.This provider does not implement this method. A következő kód azonban a System. Management. Automation. Provider. ContainerCmdletProvider. CopyItemalapértelmezett implementációja.However, the following code is the default implementation of System.Management.Automation.Provider.ContainerCmdletProvider.CopyItem.

A CopyItem megvalósításának tudnivalóiThings to Remember About Implementing CopyItem

A következő feltételek vonatkozhatnak a System. Management. Automation. Provider. ContainerCmdletProvider. CopyItemvégrehajtására:The following conditions may apply to your implementation of System.Management.Automation.Provider.ContainerCmdletProvider.CopyItem:

Dinamikus paraméterek csatolása a Copy-Item parancsmaghozAttaching Dynamic Parameters to the Copy-Item Cmdlet

Időnként a Copy-Item parancsmaghoz további, a futásidőben megadott paramétereket kell megadni.Sometimes the Copy-Item cmdlet requires additional parameters that are specified dynamically at runtime. A dinamikus paraméterek megadásához a Windows PowerShell-tároló szolgáltatójának meg kell valósítania a System. Management. Automation. Provider. Containercmdletprovider. Copyitemdynamicparameters * metódust a paraméterek kezelésére.To provide these dynamic parameters, the Windows PowerShell container provider must implement the System.Management.Automation.Provider.Containercmdletprovider.Copyitemdynamicparameters* method to handle these parameters. Ez a metódus lekérdezi a megadott elérési úton található elem paramétereit, és egy olyan objektumot ad vissza, amely a parancsmag osztályához vagy a System. Management. Automation. Runtimedefinedparameterdictionary objektumhoz hasonló tulajdonságokkal rendelkező tulajdonságokat és mezőket tartalmaz.This method retrieves the 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. A Windows PowerShell futtatókörnyezet a visszaadott objektum használatával adja hozzá a paramétereket a Copy-Item parancsmaghoz.The Windows PowerShell runtime uses the returned object to add the parameters to the Copy-Item cmdlet.

Ez a szolgáltató nem valósítja meg ezt a metódust.This provider does not implement this method. A következő kód azonban a System. Management. Automation. Provider. Containercmdletprovider. Copyitemdynamicparameters *alapértelmezett implementációja.However, the following code is the default implementation of System.Management.Automation.Provider.Containercmdletprovider.Copyitemdynamicparameters*.

MintakódCode Sample

A teljes mintakód: AccessDbProviderSample04- kód minta.For complete sample code, see AccessDbProviderSample04 Code Sample.

A Windows PowerShell-szolgáltató felépítéseBuilding the Windows PowerShell Provider

Lásd: parancsmagok, szolgáltatók és gazda alkalmazások regisztrálása.See How to Register Cmdlets, Providers, and Host Applications.

A Windows PowerShell-szolgáltató teszteléseTesting the Windows PowerShell Provider

Ha a Windows PowerShell-szolgáltató regisztrálva van a Windows PowerShellben, tesztelheti azt a parancssorban található támogatott parancsmagok futtatásával.When your Windows PowerShell provider has been registered with Windows PowerShell, you can test it by running the supported cmdlets on the command line. Vegye figyelembe, hogy a következő példában a kimenet kitalált hozzáférési adatbázist használ.Be aware that the following example output uses a fictitious Access database.

  1. Futtassa a Get-ChildItem parancsmagot az alárendelt elemek listájának lekéréséhez az Access-adatbázis Customers táblájában.Run the Get-ChildItem cmdlet to retrieve the list of child items from a Customers table in the Access database.

    Get-ChildItem mydb:customers
    

    A következő kimenet jelenik meg.The following output appears.

    PSPath        : AccessDB::customers
    PSDrive       : mydb
    PSProvider    : System.Management.Automation.ProviderInfo
    PSIsContainer : True
    Data          : System.Data.DataRow
    Name          : Customers
    RowCount      : 91
    Columns       :
    
  2. A tábla tartalmának Get-ChildItem lekéréséhez futtassa újra a parancsmagot.Run the Get-ChildItem cmdlet again to retrieve the data of a table.

    (Get-ChildItem mydb:customers).data
    

    A következő kimenet jelenik meg.The following output appears.

    TABLE_CAT   : c:\PS\northwind
    TABLE_SCHEM :
    TABLE_NAME  : Customers
    TABLE_TYPE  : TABLE
    REMARKS     :
    
  3. Most a Get-Item parancsmag használatával kérje le az adattábla 0. sorában található elemeket.Now use the Get-Item cmdlet to retrieve the items at row 0 in the data table.

    Get-Item mydb:\customers\0
    

    A következő kimenet jelenik meg.The following output appears.

    PSPath        : AccessDB::customers\0
    PSDrive       : mydb
    PSProvider    : System.Management.Automation.ProviderInfo
    PSIsContainer : False
    Data          : System.Data.DataRow
    RowNumber     : 0
    
  4. A Get-Item 0. sorban szereplő elemek adatok beolvasására való ismételt felhasználás.Reuse Get-Item to retrieve the data for the items in row 0.

    (Get-Item mydb:\customers\0).data
    

    A következő kimenet jelenik meg.The following output appears.

    CustomerID   : 1234
    CompanyName  : Fabrikam
    ContactName  : Eric Gruber
    ContactTitle : President
    Address      : 4567 Main Street
    City         : Buffalo
    Region       : NY
    PostalCode   : 98052
    Country      : USA
    Phone        : (425) 555-0100
    Fax          : (425) 555-0101
    
  5. Most a New-Item parancsmag használatával vegyen fel egy sort egy meglévő táblába.Now use the New-Item cmdlet to add a row to an existing table. A Path paraméter megadja a sor teljes elérési útját, és olyan sorszámot kell jeleznie, amely nagyobb, mint a táblában lévő sorok száma.The Path parameter specifies the full path to the row, and must indicate a row number that is greater than the existing number of rows in the table. A Type paraméter azt jelzi, hogy a "sor" a hozzáadandó elem típusát adja meg.The Type parameter indicates "row" to specify that type of item to add. Végül a Value paraméter határozza meg a sor oszlop értékeinek vesszővel tagolt listáját.Finally, the Value parameter specifies a comma-delimited list of column values for the row.

    New-Item -Path mydb:\Customers\3 -ItemType "row" -Value "3,CustomerFirstName,CustomerLastName,CustomerEmailAddress,CustomerTitle,CustomerCompany,CustomerPhone, CustomerAddress,CustomerCity,CustomerState,CustomerZip,CustomerCountry"
    
  6. Az alábbi módon ellenőrizze, hogy az új Item művelet helyes-e.Verify the correctness of the new item operation as follows.

    PS mydb:\> cd Customers
    PS mydb:\Customers> (Get-Item 3).data
    

    A következő kimenet jelenik meg.The following output appears.

    ID        : 3
    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
    

Lásd még:See Also

Windows PowerShell-szolgáltatók létrehozásaCreating Windows PowerShell Providers

A Windows PowerShell-szolgáltató tervezéseDesigning Your Windows PowerShell Provider

Egy adott elemmel rendelkező Windows PowerShell-szolgáltató implementálásaImplementing an Item Windows PowerShell Provider

Navigációs Windows PowerShell-szolgáltató implementálásaImplementing a Navigation Windows PowerShell Provider

Parancsmagok, szolgáltatók és gazdagép-alkalmazások regisztrálásaHow to Register Cmdlets, Providers, and Host Applications

Windows PowerShell SDKWindows PowerShell SDK

Windows PowerShell – programozói útmutatóWindows PowerShell Programmer's Guide