Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何从PS模块路径加载dll_Powershell_Dll_Dllimport - Fatal编程技术网

Powershell 如何从PS模块路径加载dll

Powershell 如何从PS模块路径加载dll,powershell,dll,dllimport,Powershell,Dll,Dllimport,我有一个PS模块,一切正常。对于作为此模块一部分的新脚本,我需要从Microsoft WindowsAPICodePack加载dll 我已将dll添加到模块内的“Assemblies”文件夹中,该文件夹安装在默认位置(C:\Program Files\WindowsPowershell\Modules\ModuleName) 使用dll的脚本在测试中运行良好,当dll位于临时文件夹(例如“c:\temp”)中时,但是当我从模块运行脚本时,使用模块中dll副本的路径(c:\Program File

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

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

使用dll的脚本在测试中运行良好,当dll位于临时文件夹(例如“c:\temp”)中时,但是当我从模块运行脚本时,使用模块中dll副本的路径(c:\Program Files\WindowsPowershell\Modules\ModuleName\Assemblys\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
}
如果

那么它就会失败

如果

那么它就会成功

尝试过

将dll添加到清单中模块的
必需程序集

将此添加到脚本的开头

Using moduleName
Using namespace Microsoft.WindowsAPICodePack
同样的错误

$DllPath = "C:\temp\dllname.dll"
Using moduleName
Using namespace Microsoft.WindowsAPICodePack