2012-01-20 53 views
0

有誰知道我如何加載DLL而不在每個遠程服務器上使用我正在使用持久連接並運行invoke-command cmdlet?Powershell版本2加載DLL用於持久連接的調用命令scriptblock

我正在使用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

回答

1

我敢肯定你會需要Ionic.Zip.dll複製到遠程機器做到這一點。你可以嘗試從你的領導系統分享它,並使用UNC路徑從遠程機器加載它(我從未嘗試過......現在去......):-)

更新 - yep只是確認你可以通過一個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

您是否正在運行.NET 3.5 SP1?從該服務包開始,允許從網絡共享中啓動託管代碼。看到這篇文章 - http://blogs.msdn.com/b/brada/archive/2008/08/13/net-framework-3-5-sp1-allows-managed-code-to-be-launched-from-一,網絡share.aspx。 –

+0

@KeithHill是的,我得到了與.NET 3.5 SP1安裝錯誤。當我做'[environment] :: Version'時,它是2.0 ...不知道它是否重要...有趣的是,我甚至無法在Win7上用PS3 CPT2安裝'HRESULT:0x80131515'調用LoadFrom。沒有備用數據流...在PS2上使用XP很好。儘管我能夠從UNC路徑調用.NET控制檯程序。 –

+0

感謝您的快速回復:)我只會咬緊牙關,將這個DLL複製到我的所有遠程機器上。如果DLL不存在,也許甚至可以將它添加到我將運行的腳本中,只需將其複製即可。再次感謝! – user1161625