title: Powershell PSCX Write-Zip is slow
body: <p>Can anyone help me troubleshoot why this PSCX cmdlet 'Write-Zip' is so slow?  It takes 1.5 hours when the DotNetZip library can ZIP the same folders in about 20 minutes.  (The issue with the DotNetZip library is that it chokes with large files, so I switched over to PSCX which is perfect, cool little progress bar and it actually works too, just very slowly).</p>
  
  <p>Here is some sample code, let me know if you need to see anything else. </p>
  
  <pre><code>    $ElapsedTime = [System.Diagnostics.Stopwatch]::StartNew()
  
      Write-Host "Script Started at $(get-date)"
  
      Import-Module Pscx
      Import-Module BitsTransfer
  
      Write-Host "Just imported the BitsTransfer and Pscx modules"
  
      Write-Host "*** Starting backup portion of script ***"
  
      foreach($i in $appServers) {
  
              if (!(Test-Path -path \\$i\c$\newDeploy)) {
                  New-Item \\$i\c$\newDeploy -type directory
                  Write-Host "Just created newDeploy folder on $i"
              }
              if (!(Test-Path -path \\$i\c$\newDeploy\backup)) {
                  New-Item \\$i\c$\newDeploy\backup -type directory
                  Write-Host "Just created newDeploy\backup folder on $i"
              }
              if(!(Test-Path \\$i\c$\newDeploy\zipper.ps1)) {
                  Start-BitsTransfer -Source \\$appDeployServer\c$\newDeploy\zipper.ps1 -Destination \\$i\c$\newDeploy
                  Write-host "Just added zipper.ps1 to $i"
              }
  
      }
  
      foreach($i in $appServers) {
  
          $sessionForI = New-PSSession -computername $i
          Invoke-Command -Session $sessionForI -ArgumentList  $aosFolder, $i, $ElapsedTime -ScriptBlock {
              param ($aosFolder, $i, $ElapsedTime)
  
              Import-Module Pscx
              Write-Host "Just imported Pscx module for $i"
  
              if ((Test-Path C:\\newDeploy\\backup\\$aosFolder.zip)) {
                  Remove-Item C:\\newDeploy\\backup\\$aosFolder.zip
                  Write-Host "Just removed newDeploy\backup\$aosFolder.zip on $i"
              }
  
              Write-Host "Just started creating new ZIP file backup created on $i"
              Write-Host "   Elapsed Time: $($ElapsedTime.Elapsed.ToString())"
  
              cd "C:\Program Files (x86)\Folder\$aosFolder"
              Get-ChildItem "C:\Program Files (x86)\Folder\$aosFolder" -Recurse -Exclude *.e2e | Write-Zip -OutputPath "C:\newDeploy\backup\$aosFolder.zip" -NoClobber -Level 1
  
              write-host "   Elapsed Time: $($ElapsedTime.Elapsed.ToString())"
              Write-Host "Just finished creating new ZIP file backup created on $i"
          }
          remove-PSSession -session $sessionForI
  
      }
  
      Write-Host "Just ran second foreach loop to ZIP all folders to backup on each server"
  
      foreach($i in $appServers) {
          if(!(Test-Path -path C:\newDeploy\backup\$i)) {
              New-Item C:\newDeploy\backup\$i -type directory
              Write-Host "Just created DEPLOY SERVER's newDeploy\backup\$i folder for backups"
          }
          Start-BitsTransfer -Source \\$i\c$\newDeploy\backup\$aosFolder.zip -Destination C:\newDeploy\backup\$i
          Write-Host "$i backup ZIP transferred to deploy server"
      }
  
      Write-Host "Just ran third foreach loop to move all ZIP files to the backup server for each remote server"
  
      foreach($i in $appServers) {
          Remove-Item \\$i\c$\newDeploy\backup\$aosFolder.zip
          Write-Host "Just removed newDeploy\backup\$aosFolder.zip on $i"
      }
  
      Write-Host "Just ran forth foreach loop to delete all backup ZIP files to cleanup"
  
      $date = get-date -format "M-d-yyyy"
      Write-Zip -Path "C:\newDeploy\backup" -OutputPath "C:\newDeploy\backup\$date APPbackup.zip" -NoClobber -Level 1
      Write-Host "Just ran final ZIP command to put all server's backups into one neat ZIP"
  
      foreach($i in $appServers) {
          if((Test-Path -path C:\newDeploy\backup\$i)) {
              Remove-Item -Force -Recurse C:\newDeploy\backup\$i
              Write-Host "Just removed DEPLOY SERVER's newDeploy\backup\$i folder"
          }
      }
      Write-Host "Just ran fifth foreach loop to delete each server's backup folder on the local server to cleanup"
  
      Write-Host "*** Finished with backup portion of script ***"
  
      Write-Host "*** Starting deploy preparation portion of script ***"
  
  
  
      Write-Host "*** Finished with deploy preparation portion of script ***"
  
      Write-Host "Script Ended at $(get-date)"
  </code></pre>