পাওয়ারশেল স্ক্রিপ্টে, আমি ফোল্ডারটি মোছার আগে একটি ফোল্ডার জিপ করতে চাই। আমি নিম্নলিখিতগুলি চালাচ্ছি (আমি স্নিপেটটি কোথায় পেয়েছি তা মনে নেই):
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)
}
}
এই স্নিপেটটি প্রকৃতপক্ষে ফোল্ডারটি সংকুচিত করে, তবে একটি অ্যাসিনক্রোনাস উপায়ে। প্রকৃতপক্ষে, শেল.অ্যাপ্লিকেশন অবজেক্টগুলির কপিহির পদ্ধতিটি সংক্ষেপণ শুরু করে এবং এর সমাপ্তির জন্য অপেক্ষা করে না। আমার স্ক্রিপ্টগুলির পরবর্তী বিবৃতিগুলি তখন জগাখিচু হয়ে যায় (জিপ ফাইল প্রক্রিয়াটি সম্পন্ন না হওয়ায়)।
কোন পরামর্শ? সম্ভব হলে আমি কোনও এক্সিকিউটেবল ফাইল যুক্ত করা এবং খাঁটি উইন্ডোজ বৈশিষ্ট্যগুলিতে থাকা এড়াতে চাই।
আমার PS1 ফাইলের সম্পূর্ণ বিষয়বস্তু ডিবিটির আসল নাম বিয়োগের সম্পাদনা করুন edit স্ক্রিপ্টের লক্ষ্য হ'ল এসকিউএল ডিবি-র একটি সেট ব্যাকআপ করা, তারপরে বর্তমান তারিখের সাথে নামযুক্ত ফোল্ডারে একক প্যাকেজে ব্যাকআপগুলি জিপ করুন:
$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 ..."
লাইন 1: লাইন 2:$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")