我有一个PS模块-一切正常。对于此模块中的新脚本,我需要从Microsoft WindowsAPICodePack加载dll
我已将dll添加到模块内的“程序集”文件夹中,该文件夹安装在默认位置(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
相同错误