Je soupçonne que la solution que vous cherchez est Modules Powershell. Ils exécutent les rôles que les classes effectuent généralement dans d'autres langues. Ils vous donnent un très simple et structurée de manière à réutiliser votre code.
Voici comment obtenir la fonctionnalité des classes de PS en utilisant des modules. Sur la ligne de commande vous pouvez faire ceci:
New-Module -ScriptBlock {function add($a,$b){return $a + $b}; function multiply($a,$b){return $a * $b}; function supersecret($a,$b){return multiply $a $b}; export-modulemember -function add, supersecret}
Alors vous seriez en mesure de:
PS C:\> add 2 4
6
PS C:\> multiply 2 4
The term 'multiply' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was inc
luded, verify that the path is correct and try again.
At line:1 char:9
+ multiply <<<< 2 4
+ CategoryInfo : ObjectNotFound: (multiply:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
PS C:\> supersecret 2 4
8
Comme vous pouvez le voir multiplier privé dans le module. De plus, traditionnellement, vous inatantiate un objet est une instance du module. C'est fait via l'-AsCustomObject paramètre:
$m = New-Module -ScriptBlock {function add($a,$b){return $a + $b}; function multiply($a,$b){return $a * $b}; function supersecret($a,$b){return multiply $a $b}; export-modulemember -function add, supersecret} -AsCustomObject
Ensuite, vous pouvez:
PS C:\> $m.add(2,4)
6
PS C:\> $m.multiply(2,4)
Method invocation failed because [System.Management.Automation.PSCustomObject] doesn't contain a method named 'multiply'.
At line:1 char:12
+ $m.multiply <<<< (2,4)
+ CategoryInfo : InvalidOperation: (multiply:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
PS C:\> $m.supersecret(2,4)
8
Tout cela illustre l'utilisation de modules Dynamiques sens rien n'est stocké sur le disque pour pouvoir les réutiliser. C'est bien pour des fonctionnalités simples. Si vous voulez réellement être capable de lire le code et de le réutiliser à l'avenir des sessions ou des scripts cependant, vous voulez le stocker dans un .psm1 fichier puis le stocker dans un dossier dans un dossier avec le même nom (sans l'extension) que le fichier. Vous pouvez ensuite importer le module dans votre session en ligne de commande ou dans un autre script.
Comme un exemple, disons que j'ai pris ce code:
function Add{
param(
$a,
$b
)
return $a + $b
}
function Multiply{
param(
$a,
$b
)
return $a + $b
}
function SuperSecret{
param(
$a,
$b
)
return Multiply $a $b
}
Export-ModuleMember -Function Add, SuperSecret
Et enregistré dans un fichier appelé TestModule.psm1 dans le dossier: C:\Windows\System32\WindowsPowerShell\v1.0\Modules\TestModule
Le dossier Modules dans le Powershell dossier d'installation est une magie de dossier et de tous les modules qui y sont stockées sont visibles à l'Import-Module applet de commande sans avoir à spécifier un chemin d'accès. Maintenant, si nous courons Get-Module -List
à la ligne de commande, nous voyons:
ModuleType Name ExportedCommands
---------- ---- ----------------
Script DotNet {}
Manifest FileSystem {Get-FreeDiskSpace, New-Zip, Resolve-ShortcutFile, Mount-SpecialFolder...}
Manifest IsePack {Push-CurrentFileLocation, Select-CurrentTextAsVariable, ConvertTo-Short...
Manifest PowerShellPack {New-ByteAnimationUsingKeyFrames, New-TiffBitmapEncoder, New-Viewbox, Ne...
Manifest PSCodeGen {New-Enum, New-ScriptCmdlet, New-PInvoke}
Manifest PSImageTools {Add-CropFilter, Add-RotateFlipFilter, Add-OverlayFilter, Set-ImageFilte...
Manifest PSRss {Read-Article, New-Feed, Remove-Article, Remove-Feed...}
Manifest PSSystemTools {Test-32Bit, Get-USB, Get-OSVersion, Get-MultiTouchMaximum...}
Manifest PSUserTools {Start-ProcessAsAdministrator, Get-CurrentUser, Test-IsAdministrator, Ge...
Manifest TaskScheduler {Remove-Task, Get-ScheduledTask, Stop-Task, Add-TaskTrigger...}
Manifest WPK {Get-DependencyProperty, New-ModelVisual3D, New-DiscreteVector3DKeyFrame...
Manifest AppLocker {}
Manifest BitsTransfer {}
Manifest PSDiagnostics {}
Script **TestModule** {}
Manifest TroubleshootingPack {}
Manifest Citrix.XenApp.Commands... {}
Nous pouvons voir que notre module est prêt à l'importation. On peut l'importer dans la session et de l'utiliser dans le raw à l'aide de:
Import-Module TestModule
Ou encore une fois nous pouvons instancier un objet:
$m = Import-Module TestModule -AsCustomObject