PowerShell脚本和在运行时加载/调用模块
我正在编写用于生成报告的PowerShell脚本,正在加载和调用最终用户提供的模块 首先调用用户提供的设置函数,然后加载模块:PowerShell脚本和在运行时加载/调用模块,powershell,powershell-2.0,Powershell,Powershell 2.0,我正在编写用于生成报告的PowerShell脚本,正在加载和调用最终用户提供的模块 首先调用用户提供的设置函数,然后加载模块: # Load user provided modules ($userModules = Get-ChildItem ($userModHome + "*.psm1")) | ForEach-Object { Import-Module (join-path $userModHome $_.Name) } | Out-Null 调用setup和load之后,我循环遍历
# Load user provided modules
($userModules = Get-ChildItem ($userModHome + "*.psm1")) | ForEach-Object { Import-Module (join-path $userModHome $_.Name) } | Out-Null
调用setup和load之后,我循环遍历模块列表并调用每个模块。这一切都是直截了当的,但我想实现的是,函数所需的一切都不需要全局变量
我可以要求setup函数返回一个包含任何函数可能需要的所有内容的对象,然后将该数据结构传递给每个模块,但这可能会传递很多额外的内容
我想知道是否有某种方法可以在运行时确定传递给模块的内容,或者有其他一些优雅的解决方案可以在不使用全局变量的情况下动态加载和执行模块
简而言之,我想我是在问Powershell是否有反射,可以用来确定模块的细节,然后调用。我认为最困难的部分是确定通过特定模块的参数。不一定完全理解您的问题,但这里有两种方法可以在计算机上找到该模块 首先,您可以使用经典的
$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 ».
我试图确定的是,是否有一种方法可以在运行时确定模块的详细信息,以及如何通过传入它可能需要的任何参数来调用它。简而言之,Powershell是否有任何方法可以使用反射来确定模块的详细信息,然后调用。