在导入模块期间添加类型

Add type during Import-Module

在导入模块时,PowerShell 中是否有 Add-Type

我有一个要作为模块导入的自定义 VB DLL。 DLL 中有 2 个导入:

Imports Microsoft.ConfigurationManagement.ManagementProvider
Imports Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine

依赖于 WqlQueryEngine 的函数在我执行之前不起作用:

Add-Type "C:\Program Files (x86)\Configuration Manager\Console\bin\AdminUI.WqlQueryEngine.dll"

在导入过程中是否可以执行此操作?或者更改 PowerShell 查找程序集的位置?

还有为什么我必须这样做? 导入依赖的文件都在同一个目录中? 第一次导入依赖于C:\Program Files (x86)\Configuration Manager\Console\bin\Microsoft.ConfigurationManagement.ManagementProvider.dll.

为什么一个有效而另一个需要添加?

如果您正在为您的模块使用模块清单 (.psd1) 文件(您应该这样做),您可以指定所需程序集的列表 (RequiredAssemblies = @())。这将导致 PowerShell 在您自己的模块加载 VB DLL 之前加载它们。

详细描述了模块清单here

至于为什么一个有效而另一个无效:很难说。已经在 GAC 中的程序集不需要专门加载,也许是这样?

您的 powershell 模块应该有一个 manifest 列出依赖项。

链接页面中的重要行是:

# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()