Powershell Version 2 Load DLL для использования в скриптовом блоке вызова команды постоянного соединения - PullRequest
0 голосов
/ 21 января 2012

Кто-нибудь знает, как я могу загрузить DLL, не имея ее на каждом удаленном сервере, который я использую в постоянном соединении, и не выполнив командлет invoke-command с?

Я использую 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
    }

Спасибо.

-Джит

Ответы [ 3 ]

1 голос
/ 21 января 2012

Я уверен, что вам нужно скопировать 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 на все ваши серверы ...

0 голосов
/ 24 января 2012

Я думаю, что ваши проблемы с доступом к удаленным ресурсам в уже удаленном сеансе связаны с двойной аутентификацией. Проверить эту ссылку http://www.ravichaganti.com/blog/?p=1230

0 голосов
/ 21 января 2012

Вы можете использовать UNC-путь в LoadFrom для удаленных ящиков, но я вижу, что у кого-то возникли проблемы с тем же с DotNetZip:

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

...