2012-05-07 2 views
2

Я работаю над скриптом PowerShell для генерации отчетов, я загружаю и вызываю модули, предоставляемые конечным пользователем.Сценарий PowerShell и модули загрузки/вызова во время выполнения

Сначала я вызвать функцию при условии, пользовательской настройки, а затем загрузить модули:

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

После вызова настройки и загрузки, I цикл по списку модулей и назвать каждого из них. Все это прямолинейно, но то, что я хотел бы выполнить, не требует глобальных переменных для всего, что потребуется функции.

Я мог бы потребовать, чтобы функция настройки возвращала объект, который содержит все, что может понадобиться любой функции, а затем передает эту структуру данных в каждый модуль, но это, возможно, передаёт много лишнего материала.

Мне интересно, можно ли во время выполнения определить, что передать модулю или какое-то другое элегантное решение для динамической загрузки и выполнения модулей без использования глобальных переменных.

В двух словах я думаю, что спрашиваю, может ли Powershell иметь отражение, чтобы определить детали модуля, а затем позвонить. Трудная часть, которую я предполагаю, определяет, какие параметры передать конкретный модуль.

ответ

1

Не уверен, чтобы полностью понять ваш вопрос, но вот два способа найти модуль на компьютере.

Первый, вы можете использовать классический $env:PSModulePath, чтобы сохранить место, где клиент хранит свой модуль, и просто добавьте дополнительный код, чтобы взять в себя родные модули Microsoft.

Второй, если вы доставляете свой собственный код в качестве модуля, вы можете его параметризовать, как показано ниже.

#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

Смежные вопросы