ในสคริปต์ 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)
    }
}
ตัวอย่างนี้บีบอัดโฟลเดอร์จริงๆ แต่ในแบบอะซิงโครนัส อันที่จริงแล้ววิธี CopyHere ของวัตถุ Shell.Application เริ่มการบีบอัดและไม่รอให้เสร็จสมบูรณ์ ประโยคต่อไปของสคริปต์ของฉันก็จะเลอะ (เนื่องจากกระบวนการไฟล์ zip ยังไม่เสร็จสิ้น)
ข้อเสนอแนะใด ๆ หากเป็นไปได้ฉันต้องการหลีกเลี่ยงการเพิ่มไฟล์ที่ปฏิบัติการได้และใช้งานฟีเจอร์ Windows ล้วน ๆ
[แก้ไข] เนื้อหาทั้งหมดของไฟล์ PS1 ของฉันลบด้วยชื่อจริงของฐานข้อมูล เป้าหมายของสคริปต์คือการสำรองข้อมูลชุดของ SQL 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 ..."Line2:$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")