任何人都可以幫我解答爲什麼這個PSCX cmdlet的'Write-Zip'太慢了嗎? DotNetZip庫在大約20分鐘內可以壓縮相同的文件夾需要1.5小時。 (DotNetZip庫的問題在於它會淹沒大文件,所以我切換到了PSCX,這是一個完美的,很酷的小進度條,它實際上也工作得非常慢)。Powershell PSCX Write-Zip很慢
下面是一些示例代碼,讓我知道如果你需要看到其他東西。
$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)"
有關於它的全部源代碼,任何最終的解決方案? – Kiquenet 2013-02-19 15:15:59
我按照唯一的答案建議使用7zip。我會很快發佈代碼。 – user1161625 2013-02-19 22:24:05
cd「D:\ inetpub \ wwwroot」 \t \t \t Get-ChildItem「D:\ inetpub \ wwwroot」-Recurse -Exclude * .e2e | D:\ newDeploy \ 7za.exe a -mx1「D:\ newDeploy \ backup \ sites.zip」$ _。FullName – user1161625 2013-02-19 22:26:22