0

有谁知道我如何加载一个 DLL,而无需在我在持久连接中使用的每台远程服务器上使用它并运行 invoke-command 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
    }

谢谢你 。

-吉姆

4

3 回答 3

1

我很确定您需要复制Ionic.Zip.dll到远程机器才能执行此操作。您可以尝试从您的领导系统中共享它并使用 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

当我加载 DLL 的本地副本时,AddFile 方法工作正常。您唯一的选择可能是将此 DLL 复制到您的所有服务器...

于 2012-01-20T23:32:37.940 回答
0

我认为您在已经远程会话中访问远程资源的问题与双跳身份验证有关。检查此链接http://www.ravichaganti.com/blog/?p=1230

于 2012-01-23T22:38:04.053 回答
0

您可以在远程框的 LoadFrom 中使用 UNC 路径,但我看到有人在使用 DotNetZip 时遇到了问题:

http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/dd5dcae2-1ccc-4be2-b986-61c069102ffb/

于 2012-01-20T23:34:19.937 回答