2014年4月19日土曜日

PowerShellを使って「内容を圧縮してディスク領域を節約する」設定を行う

ファイルのプロパティにある「内容を圧縮してディスク領域を節約する」にチェックを入れる事で、ファイルの容量を削減する事が可能です。 

<使用例> 

テスト用に976KB(1,000,000バイト)のテキストファイルを作成しました。

 ディスク上のサイズが980KBのファイルが・・・・
  

 64KBになりました。
  

 サーバで自動的に作成されるログファイルの「内容を圧縮してディスク領域を節約する」にPowerShellを使ってチェックを入れる事ができればディスク容量を節約できそうです。ZIPファイルにしてもいいですがこちらのほうが見る時に楽そうです。

 <設定用PowerShellスクリプト>

このスクリプトを使うことで「内容を圧縮してディスク領域を節約する」のチェックをつけたり、外したりができます。
Pathパラメータには設定を行うファイルのパス、
Modeパラメータにはチェックを外すときは"Uncompress"、チェックをつけて圧縮するときには"Compress"のパラメータを入れます。(デフォルトは"Compress")
 
Param(
[Parameter(Mandatory=$True)]
[String]$Path 
,
[Parameter(Mandatory=$False,
HelpMessage="""Compress""(圧縮),""Uncompress""(非圧縮)のどちらかを指定してください")]
[ValidateSet("Compress", "Uncompress")]  
[String]$Mode = "Compress"
)

# エラーメッセージを表示して処理を中止する関数
Function Set-FileError {
        $Message=@"
 
   
    Pathに記載されたファイルが存在しません。
   処理を中止します。 
  
"@
    Write-Error $Message
    Exit
}

# Pathに指定されたパスにオブジェクトがあるかどうかをテストします。
If(-not(Test-Path -Path $Path)){
    Set-FileError
    }
    
# Pathに指定されたオブジェクトがファイルかどうかをテストします。
If((Get-Item $Path).PsIsContainer){
    Set-FileError
    }

# WmiObjctの設定を行います。
$Path = $Path -replace "\\","\\"
$File = Get-WmiObject -Query "SELECT * FROM CIM_DataFile WHERE Name='$Path'"

# ModeパラメータがComressの場合は圧縮、Uncompressの場合は非圧縮します。
If($Mode -eq "Compress"){
    $File.Compress()
    }
ElseIF($Mode -eq "Uncompress"){
    $File.Uncompress()
    }
  
 

<参考サイト>

#PSTip Compress and uncompress files and folders using WMI
Hey, Scripting Guy! テキスト ファイルが存在するかどうかを確認する方法はありますか


0 件のコメント:

コメントを投稿