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.