2012-12-24 46 views
1

我可以找到示例VBA和C#代碼來執行此操作,但是沒有 PowerShell代碼片段(谷歌對此非常安靜,Stackoverflow也是如此)。任何人都可以指向我的一些Powershell(或提供一些)這樣做?我期待它會通過COM獲取Access的API。在PowerShell中壓縮MS Access數據庫的示例代碼

謝謝!

回答

1

我應該知道比在聖誕節前一天提問並希望得到快速反應,所以我自己做了。原來,答案在任何情況下都非常簡單。下面的頂層函數執行我所需要的操作,驅動程序函數將遍歷目錄中的所有訪問數據庫並壓縮其中的每個數據庫。

function compactDatabaseFile($sourceFilename, $destinationFileName) 
{ 

    $application = New-Object -ComObject Access.Application 

    Write-Host $($(Get-Date).ToString() + ": Starting compacting of $sourceFilename to $destinationFileName") 

    $application.CompactRepair($sourceFilename,$destinationFileName, $true) 

    Write-Host $($(Get-Date).ToString() + ": Finished compacting of $sourceFilename to $destinationFileName") 

    $application.Quit() 
} 

function driver($sourceDirectory, $newDestinationDirectory, $filePatterns = @("*.mdb","*.accdb")) 
{ 
    if (Test-Path $newDestinationDirectory) { 
     Write-Host "Destination Directory $newDestinationDirectory exists. Exiting without doing anything." 
     Exit 
    } 

    if (!$(Test-Path $sourceDirectory)) { 
     Write-Host "SourceDirectory $sourceDirectory not found. Exiting without doing anything." 
     Exit 
    } 

    mkdir $newDestinationDirectory | Out-Null 

    gci -path $($sourceDirectory + "\*") -include $filePatterns | % { 
     $sourceFileName = $($sourceDirectory + "\" + $_.Name); 
     $destinationFileName = $($newDestinationDirectory + "\" + $_.Name); 
     compactDatabaseFile $sourceFileName $destinationFilename 
    } 
} 
+0

好點。我這樣做是因爲我設想CompactDatabaseFile()函數也是獨立的。但是,可以修改驅動程序功能以創建應用程序並將其傳遞給緊湊功能,如果兩者保持在一起的話。 – DWright