大量のログファイルを生成するWindows 2012 R2を実行しているアプリケーションサーバーがあり、準定期的に空き領域が不足している状態でアプリケーションボリュームを実行しています。アプリケーション自体の制限により、ログファイルを移動または名前変更したり、NTFSデータ重複排除を有効にしたりすることはできません。また、10年前ではないため、バッチまたはvbscriptを使用してこれを実行したくありません。私のために。
ログファイルはすべてアプリケーションインストールディレクトリのさまざまなサブフォルダーにあり、拡張子が異なります(1つのコンポーネントがログファイル拡張子として日付を追加します)。アプリケーション開発者は悪意があるため、アプリケーションインストールディレクトリにはスペースが含まれます。ログが書き込まれるサブフォルダは、少なくともログを書き込むためにのみ使用されます。これはCPUに大きく依存するアプリケーションでもあるため、ログフォルダー自体を圧縮し、ログの圧縮ファイルの書き込みに関連するCPUのペナルティを発生させたくありません。
PowerShellを使用して、x日以上経過したログファイルに対してNTFS圧縮をインプレースで有効にするにはどうすればよいですか?
ファイル操作に対するPowerShellサポートがまだ不十分であるため、最も簡単な解決策は、compact.exe
ユーティリティを呼び出すPowerShellスクリプトを作成し、それをスケジュールされたタスクとして設定することです。パス名にスペースがあるため、compact.exe
およびInvoke-WMIMethod
クラスを使用する代わりに、CIM_DataFile
を直接呼び出す必要があります(スペースを処理するために多くの余分な労力が発生します)パス内)。
Xの経過時間が3日であるとすると、PowerShellスクリプトは次のようになります。
$logfolder="[location of the first logging subfolder]"
$age=(get-date).AddDays(-3)
Get-ChildItem $logfolder | where-object {$_.LastWriteTime -le $age -AND $_.Attributes -notlike "*Compressed*"} |
ForEach-Object {
compact /C $_.FullName
}
$logfolder="[location of the next logging subfolder]"
Get-ChildItem $logfolder | where-object {$_.LastWriteTime -le $age -AND $_.Attributes -notlike "*Compressed*"} |
ForEach-Object {
compact /C $_.FullName
}
...
2番目の条件は、すでに圧縮されたファイル(このスクリプトが最初に実行された後に存在する)をスキップすることにより、スクリプトの実行を高速化することです。必要に応じて、または多くの異なるログサブフォルダーがある場合は、繰り返しのPowerShellコードから関数を作成することはおそらく意味がありますが、これはかなり簡単な作業です。
繰り返しコードは、配列とforeachループを使用することで回避できます。
$logfolders=("D:\Folder\One","D:\Folder\Two")
$age=(get-date).AddDays(-3)
foreach ($logfolder in $logfolders) {
Get-ChildItem $logfolder | where-object {$_.LastWriteTime -le $age -AND $_.Attributes -notlike "*Compressed*"} |
ForEach-Object {
compact /C $_.FullName
}
}
.....
Invoke-WmiMethod -Path "Win32_Directory.Name = 'C:\ FolderToCompress'" -Name compress
これらのログファイルがCにない場合:Server 2012 R2重複排除機能を使用します。次に、3日経過した.logファイル(デフォルト)のみを重複排除するように構成できます。これを制御するための2番目の方法、またはそれがC上にある場合:ログディレクトリを別のドライブに移動し、JUNCTIONを使用して新しい場所をポイントします。Hardlink-Shell-Extensionで httpsから作成するのが最も簡単です。 ://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html -その後、2012 R2重複排除を使用します。ログファイルとSQl-dump-for-backupドライブの重複排除率が90%をはるかに超えることがわかりました。