1

これを行うためのサンプル VBA と C# コードを見つけることができますが、Powershell のスニペットはありません(Google はこれについて驚くほど沈黙しており、Stackoverflow もそうです)。誰かがこれを行う Powershell (または提供) を教えてもらえますか? COM経由でAccessのAPIに到達することを期待しています。

ありがとうございました!

4

1 に答える 1

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
    }
}
于 2012-12-24T21:24:32.793 に答える