2

レポートを生成するための PowerShell スクリプトに取り組んでおり、エンド ユーザーが提供するモジュールを読み込んで呼び出しています。

最初に、ユーザー提供のセットアップ関数を呼び出してから、モジュールをロードします。

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

セットアップと読み込みを呼び出した後、モジュールのリストをループして、それぞれを呼び出します。これはすべて簡単ですが、私が達成したいことは、関数が必要とするすべてのものに対してグローバル変数を必要としないことです。

関数が必要とする可能性のあるすべてを含むオブジェクトを返すセットアップ関数を要求し、そのデータ構造を各モジュールに渡すことができますが、それは多くの余分なものを渡す可能性があります。

モジュールに何を渡すかを実行時に決定する方法があるかどうか、またはグローバル変数を使用せずにモジュールを動的にロードして実行する他のエレガントなソリューションがあるかどうか疑問に思っています。

一言で言えば、Powershell にリフレクションがあり、モジュールの詳細を判断して呼び出すことができるかどうかを尋ねていると思います。私が推測する難しい部分は、特定のモジュールに渡すパラメーターを決定することです。

4

1 に答える 1

1

あなたの質問を完全に理解することはできませんが、コンピューターでモジュールを見つける方法は 2 つあります。

まず、クラシカルを使用して$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 ».
于 2012-05-08T09:51:50.023 に答える