Függvények törlése, módosítása

Ha egy függvényre nincs szükségem, akkor törölhetem is. Van ugye egy speciális PSDrive-om, a function: , ez tartalmazza az összes függvényt és ennek különböző elemeit ugyanúgy törölhetem, mint a fájlokat:

[33] PS I:\>Get-ChildItem function:

 

CommandType     Name                          Definition

-----------     ----                          ----------

...

Function        belső                         param($b) Write-Host "Bels...

Function        külső                         param($p) function belső (...

Function        függvénytár                   function global:első...

Function        első                          "első"

Function        második                       "második"

Function        titkos                        function private:egymegegy...

Function        egymegegy                     "1+1=2"

A lista végén vannak az általam definiált függvények, előtte „gyári” függvények vannak, amelyeket mindjárt átnézünk.

Ha meg szeretnék szabadulni például az egymegegy függvényemtől, akkor használhatom a remove‑item cmdletet:

[34] PS I:\>Remove-Item function:egymegegy

Ha már itt tartunk, akkor vajon PSDrive-kezelő cmdletekkel is létrehozhatok-e függvényt? Természetesen igen, nézzük hogyan működik a new-item :

[35] PS C:\> new-item -path function: -name fv1 -value {"Fájlként new-item-m

el"}

 

CommandType     Name                          Definition

-----------     ----                          ----------

Function        fv1                           "Fájlként new-item-mel"

 

 

[36] PS C:\> fv1

Fájlként new-item-mel

Módosítani a függvényeimet vagy megismételt függvénydefinícióval tudom, vagy a szintén a PSDrive-kezelő set-item  cmdlettel:

[37] PS C:\> Set-Item -path function:fv1 -Value {"Módosítás set-item-mel"}

[38] PS C:\> fv1

Módosítás set-item-mel

Hát ez sikerült! Akkor nézzük is meg, hogy amúgy mire képes a set-item, és az hogyan alkalmazható a függvényekre! Érdekes módon a helpben a szintaxisában nincsen ‑options paraméter:

[53] PS C:\old> (get-help set-item).syntax

 

Set-Item [-path] <string[]> [[-value] <Object>] [-force] [-include <string[

]>] [-exclude <string[]>] [-filter <string>] [-passThru] [-credential <PSCr

edential>] [-whatIf] [-confirm] [<CommonParameters>]

Set-Item [-literalPath] <string[]> [[-value] <Object>] [-force] [-include <

string[]>] [-exclude <string[]>] [-filter <string>] [-passThru] [-credentia

l <PSCredential>] [-whatIf] [-confirm] [<CommonParameters>]

Azonban a példákban már látható, hogy van:

[54] PS C:\old> (get-help set-item).examples

 

...

 

-------------------------- EXAMPLE 4 --------------------------

 

C:\PS>set-item -path function:prompt -options "AllScope,ReadOnly"

 

 

This command sets the AllScope and ReadOnly options for the "prompt" functi

on. This command uses the Options dynamic parameter of the Set-Item cmdlet.

 The Options parameter is available in Set-Item only when you use it with t

he Alias or Function provider.

A magyarázat is ott van legalul, hogy ez egy dinamikus paraméter , és csak az Alias és a Function PSDrive használatakor létezik. Ezzel lehet beállítani a függvényem láthatóságát (scope) és – hasonlóan a változókhoz – azt is, hogy a függvényem csak olvasható (azaz nem lehet felülírni), vagy konstans (még a –force kapcsolóval sem lehet felülírni).

Megjegyzés

Sajnos elég esetleges ezen dinamikus paraméterek fellelése a helpben, a cmdletek mellett. Talán eredményesebb, ha a providerek irányából keressük meg ezeket. Például nézzük, hogy az Alias: providernek milyen dinamikus paraméterei vannak:

[63] PS C:\> get-help -Category provider -name alias

...

DYNAMIC PARAMETERS

    -Options <System.Management.Automation.ScopedItemOptions>

        Determines the value of the Options property of an alias.

 

            None

                No options. "None" is the default.

 

            Constant

                The alias cannot be deleted and its properties cannot be ch

                anged. Constant is available only when you are creating an

                alias. You cannot change the option of an existing alias to

                 Constant.

 

            Private

                The alias is visible only in the current scope (not in chil

                d scopes).

 

            ReadOnly

                The properties of the alias cannot be changed, except by us

                ing the Force parameter. You can use Remove-Item to delete

                the alias.

 

            AllScope

                The alias is copied to any new scopes that are created.

 

 

        Cmdlets Supported: New-Item, Set-Item

Azaz több lehetőségünk is van arra, hogy milyen módon kezeljük a függvényeinket, álneveinket.

Megjegyzés

Kézenfekvőnek tűnhetne, hogy a függvényobjektum definition tulajdonságát írjuk át a függvény módosításához. Ez azonban nem megy, mert az Read Only attribútum, azaz nem írható át:

[41] PS C:\> (get-item function:fv1).definition = {"Módosítás a definition t

ulajdonságon keresztül"}

"Definition" is a ReadOnly property.

At line:1 char:25

+ (get-item function:fv1).d <<<< efinition = {"Módosítás a definition tulaj

donságon keresztül"}

A fenti példában látszik, hogy hibát a definition attribútum közvetlen módosításakor kaptam.



Word To HTML Converter