2012-05-07 73 views
2

我正在使用PowerShell腳本生成報告,我正在加載和調用最終用戶提供的模塊。通過模塊的列表運行時PowerShell腳本和加載/調用模塊

# Load user provided modules 
($userModules = Get-ChildItem ($userModHome + "*.psm1")) | ForEach-Object { Import-Module (join-path $userModHome $_.Name) } | Out-Null 

調用設置和裝載後,我循環並調用每一個:

首先我調用用戶提供設置功能,然後加載模塊。這是非常直接的,但我想要完成的是不需要全局變量來實現函數所需的所有內容。

我可以要求setup函數返回一個包含任何函數可能需要的所有東西的對象,然後將該數據結構傳遞給每個模塊,但這可能會傳遞很多額外的東西。

我想知道是否有辦法在運行時確定傳遞給模塊的內容,或者其他優雅的解決方案來動態加載和執行模塊而不使用全局變量。

簡而言之,我想我問的是,如果Powershell有反射可以用來確定模塊的細節,然後調用。我假設的困難部分是確定通過特定模塊的參數。

回答

1

不確定要完全理解您的問題,但這裏有兩種方法可以在計算機上找到該模塊。

首先,則可以使用經典$env:PSModulePath存儲在客戶商店爲自己的模塊,只是把額外的代碼,以APPART微軟本機模塊的地方。

第二個,如果您將自己的代碼作爲模塊提供,則可以按照下圖所示進行參數化。

#REQUIRES -Version 2.0 
#MyModule.PSM1 
param ([strin]$ModulePath, [string] $choix) 

switch ($choix) 
{ 
    "developpement" {Import-Module $ModulePath\Modules-0201.psm1 -Verbose} 
    "Integration" {Import-Module $ModulePath\Modules-0202.psm1 -Verbose} 
    default {Import-Module $ModulePath\Modules-0203.psm1 -Verbose} 
} 

可以使用加載模塊:

Import-Module .\Mydules.psm1 -ArgumentList "C:\Développements\Pgdvlp_Powershell\Apprentissage","developpement" 
COMMENTAIRES : Chargement du module à partir du chemin 
« C:\Développements\Pgdvlp_Powershell\Apprentissage\Modules-0201.psm1 ». 
COMMENTAIRES : Exportation de la fonction « Bonjour ». 
COMMENTAIRES : Importation de la fonction « Bonjour ». 
+0

我試圖確定的是,如果有一種方法來確定在運行時模塊的細節以及如何調用它傳入任何它可能需要的參數。簡而言之,Powershell有任何方法可以使用反射來確定模塊的細節,然後調用。 – RShearer