powershell - 如何从 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
同样的错误