これを行うためのサンプル VBA と C# コードを見つけることができますが、Powershell のスニペットはありません(Google はこれについて驚くほど沈黙しており、Stackoverflow もそうです)。誰かがこれを行う Powershell (または提供) を教えてもらえますか? COM経由でAccessのAPIに到達することを期待しています。
ありがとうございました!
これを行うためのサンプル VBA と C# コードを見つけることができますが、Powershell のスニペットはありません(Google はこれについて驚くほど沈黙しており、Stackoverflow もそうです)。誰かがこれを行う Powershell (または提供) を教えてもらえますか? COM経由でAccessのAPIに到達することを期待しています。
ありがとうございました!
クリスマスの前日に質問し、迅速な対応を期待するよりもよく知っているはずなので、私は自分でそれをしました. いずれにせよ、答えは非常に単純です。以下の一番上の関数は必要なことを行い、ドライバー関数はディレクトリ内のすべてのアクセス データベースをループして、それぞれを圧縮します。
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
}
}