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版本2加载DLL以用于持久连接';s调用命令脚本块_Dll_Powershell_Dotnetzip - Fatal编程技术网

Powershell版本2加载DLL以用于持久连接';s调用命令脚本块

Powershell版本2加载DLL以用于持久连接';s调用命令脚本块,dll,powershell,dotnetzip,Dll,Powershell,Dotnetzip,有人知道我如何加载DLL,而不必在我在持久连接中使用的每台远程服务器上加载DLL并运行invoke命令cmdlet吗 我正在使用DotNetZip备份大约13台服务器上的文件夹。一切都在本地工作,但当它到达远程服务器(阵列中的第一个是本地服务器)时,它会出错,因为它看不到远程服务器上的DLL 我在一台服务器上执行此脚本,它应该压缩每个远程服务器上的文件夹: foreach($i in $appServers) { $sessionForI = New-PSSession -com

有人知道我如何加载DLL,而不必在我在持久连接中使用的每台远程服务器上加载DLL并运行invoke命令cmdlet吗

我正在使用DotNetZip备份大约13台服务器上的文件夹。一切都在本地工作,但当它到达远程服务器(阵列中的第一个是本地服务器)时,它会出错,因为它看不到远程服务器上的DLL

我在一台服务器上执行此脚本,它应该压缩每个远程服务器上的文件夹:

foreach($i in $appServers) {
        $sessionForI = New-PSSession -computername $i
        Invoke-Command -Session $sessionForI -ScriptBlock {
            if (!(Test-Path -path C:\\newDeploy)) {
                New-Item C:\\newDeploy -type directory
            }
            [System.Reflection.Assembly]::LoadFrom("C:\\newDeploy\\Ionic.Zip.dll");
            $directoryToZip = "C:\\Program Files (x86)\\SubDir\\$folder"
            $zipfile = new-object Ionic.Zip.ZipFile
            $e = $zipfile.AddSelectedFiles("name != '*.e2e'",$directoryToZip, "",1)
            if (!(Test-Path -path C:\\newDeploy\\backup)) {
                New-Item C:\\newDeploy\\backup -type directory
            }
            $zipfile.Save("C:\\newDeploy\\backup\\" + $folder+ ".zip")
            $zipfile.Dispose()
        }
        remove-PSSession -session $sessionForI
    }
多谢各位


-Jim

我很确定您需要将
Ionic.Zip.dll
复制到远程机器才能执行此操作。您可以尝试从您的lead系统中共享它,并使用UNC路径从远程机器加载它(我从未尝试过…现在…-)

更新-是的,刚刚确认您可以将UNC路径传递到
[System.Reflection.Assembly]::LoadFrom

更新2-加载程序集时,使用它的效果不太好:

Exception calling "AddFile" with "1" argument(s): "Request for the permission of type 'System.Security.Permissions.File
IOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed."
At line:1 char:11
+ $z.AddFile <<<< ("C:\AMCleanUp.log")
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException
使用“1”参数调用“AddFile”时出现异常:“请求'System.Security.Permissions.File'类型的权限”
IOPermission,mscorlib,版本=2.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089'失败。“
第1行字符:11

+$z.AddFile您可以在LoadFrom中为远程框使用UNC路径,但我发现有人在使用DotNetZip时遇到了相同的问题:


我认为在已经远程的会话中访问远程资源的问题与双跳身份验证有关。检查此链接

您正在运行.NET 3.5 SP1吗?从该service pack开始,允许从网络共享启动托管代码。请参阅本文-。@KeithHill Yep我在安装.NET 3.5 SP1时遇到了这个错误。当我做
[environment]:Version
时,它是2.0。。。不知道这是否重要。。。有趣的是,在安装了PS3 CPT2的Win7上,我甚至无法调用
LoadFrom
HRESULT:0x8013155
。也没有备用数据流。。。在XP和PS2上运行良好。不过,我可以从UNC路径调用.NET控制台程序。感谢您的快速响应:)我将咬紧牙关,将此DLL复制到我所有的远程计算机。如果DLL不存在,甚至可以将其添加到我将运行的脚本中,只需将其复制过来即可。再次感谢!感谢您的快速回复:)