导入模块时,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
。
为什么一个工作而另一个需要添加?
答案 0 :(得分:2)
如果您正在为模块使用模块清单(.psd1)文件(并且应该),则可以指定所需程序集的列表(RequiredAssemblies = @()
)。这将导致PowerShell在您自己的模块加载VB DLL之前加载它们。
详细描述了模块清单here。
至于为什么一个有效,另一个无效:很难说。已经在GAC中的程序集不需要专门加载,可能就是这种情况?
答案 1 :(得分:1)
您的powershell模块应该有manifest列出依赖项。
链接页面的重要行是:
# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()