PowerShell स्क्रिप्ट में, मैं फ़ोल्डर को हटाने से पहले एक फ़ोल्डर को ज़िप करना चाहता हूं। मैं निम्नलिखित चलाता हूं (मुझे याद नहीं है कि मुझे स्निपेट कहां मिला था):
function Compress-ToZip
{
param([string]$zipfilename)
if(-not (test-path($zipfilename)))
{
set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(Get-ChildItem $zipfilename).IsReadOnly = $false
}
$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
foreach($file in $input)
{
$zipPackage.CopyHere($file.FullName)
}
}
यह स्निपेट वास्तव में फ़ोल्डर को संपीड़ित करता है, लेकिन एक एसिंक्रोनस तरीके से। वास्तव में, Shell.Application ऑब्जेक्ट्स की CopyHere विधि संपीड़न शुरू करती है और इसके पूरा होने की प्रतीक्षा नहीं करती है। मेरी लिपियों के अगले कथन फिर गड़बड़ हो जाते हैं (क्योंकि ज़िप फ़ाइल प्रक्रिया पूरी नहीं हुई है)।
कोई सुझाव? यदि संभव हो तो मैं किसी भी निष्पादन योग्य फ़ाइलों को जोड़ने से बचना चाहता हूं और शुद्ध विंडोज सुविधाओं पर रहना चाहता हूं।
मेरे PS1 फ़ाइल की पूर्ण सामग्री [संपादित करें] DB का वास्तविक नाम है। स्क्रिप्ट का लक्ष्य एसक्यूएल डीबी के एक सेट को बैकअप करना है, फिर वर्तमान तिथि के साथ एक फ़ोल्डर में एक पैकेज में बैकअप ज़िप करें:
$VerbosePreferenceBak = $VerbosePreference
$VerbosePreference = "Continue"
add-PSSnapin SqlServerCmdletSnapin100
function BackupDB([string] $dbName, [string] $outDir)
{
Write-Host "Backup de la base : $dbName"
$script = "BACKUP DATABASE $dbName TO DISK = '$outDir\$dbName.bak' WITH FORMAT, COPY_ONLY;"
Invoke-Sqlcmd -Query "$script" -ServerInstance "." -QueryTimeOut 600
Write-Host "Ok !"
}
function Compress-ToZip
{
param([string]$zipfilename)
Write-Host "Compression du dossier"
if(-not (test-path($zipfilename)))
{
set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(Get-ChildItem $zipfilename).IsReadOnly = $false
}
$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
foreach($file in $input)
{
$zipPackage.CopyHere($file.FullName)
}
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
}
$targetDir = "E:\Backup SQL"
$date = Get-Date -format "yyyy-MM-dd"
$newDir = New-Item -ItemType Directory "$targetDir\$date\sql" -Force
BackupDB "database 1" "$newDir"
BackupDB "database 2" "$newDir"
BackupDB "database 3" "$newDir"
Get-Item $newDir | Compress-ToZip "$targetDir\$date\sql_$date.zip"
Write-Host "."
remove-item $newDir -Force -Confirm:$false -Recurse
$VerbosePreference = $VerbosePreferenceBak
Write-Host "Press any key to continue ..."
लाइन १ : लाइन २:$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")