首页 > 解决方案 > 如何从 PS 模块路径加载 dll

问题描述

我有一个 PS 模块 - 一切正常。对于作为此模块一部分的新脚本,我需要从 Microsoft WindowsAPICodePack 加载 dll

我已将 dll 添加到模块内的“Assemblies”文件夹中,该文件夹安装在默认位置 (C:\Program Files\WindowsPowershell\Modules\ModuleName)。

使用 dll 的脚本在测试中工作正常,当 dll 位于临时文件夹中时,例如“c:\temp”,但是当我从模块运行脚本时,使用模块中 dll 副本的路径(C: \Program Files\WindowsPowershell\Modules\ModuleName\Assemblies\mydllname.dll)它无法使用“找不到文件”加载 dll。

我是机器的本地管理员,所以我可以访问该路径,如果我在运行它之前提升 Powershell,它也会失败。

我需要在不修改文件夹权限的情况下从该位置加载 dll,因为该模块是通过我们的内部存储库分发给许多用户的。有什么想法可以实现吗?

有没有办法在模块加载时将 dll 加载到用户环境中?这可能也不起作用,因为它似乎是从模块路径执行/加载 dll 的权限问题。

我想我可以对 .psm1 中的 dll 运行 Set-Acl 命令,但这似乎有点笨拙,不知道安装模块进程是否需要权限?

示例代码:

Try {
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -Path $DllPath
}
Catch {
    $_
    Pause
    Break
}

如果

$DllPath = "C:\Program Files\WindowsPowerShell\Modules\module\dllname.dll"

然后会失败

如果

$DllPath = "C:\temp\dllname.dll"

然后就会成功

试过了

将 dll 添加到Required Assemblies清单中的模块

将此添加到脚本的开头

Using moduleName
Using namespace Microsoft.WindowsAPICodePack

同样的错误

标签: powershelldlldllimport

解决方案


推荐阅读