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! テキスト ファイルが存在するかどうかを確認する方法はありますか


2014年4月14日月曜日

PowerShellを使って電源オプションの取得・設定を行う

PowerShellを使ったWindowsの電源オプションの情報取得と設定方法を調べました。
以下のスクリプトを実行するすることで情報取得と設定が可能です。

<電源オプションの情報取得>

○スクリプト
Get-WmiObject -Namespace root\cimv2\power -Class win32_PowerPlan | Select-Object ElementName, IsActive | Format-Table -AutoSize
 

○結果(例)

ElementName IsActive
----------- --------
バランス           False
高パフォーマンス        True
省電力            False
画面を暗くする        False

<電源オプションの設定>

パラメータにbl, hp, psと入力し実行することで、電源オプションを「バランス」「高パフォーマンス」「省電力」に設定できます。
Param(
[Parameter(Mandatory=$True)]
[String]$PowerPlan
)

$bl =@("bl","Balanced","バランス")
$hp =@("hp","High performance","高パフォーマンス")
$ps =@("ps","Power Saver","省電力")

If ($bl -contains $PowerPlan){
    $en = 'バランス'
}
ElseIf ($hp -contains $PowerPlan){
    $en = '高パフォーマンス'
}
ElseIf ($ps -contains $PowerPlan){
    $en = '省電力'
}
else {
$Message=@"
 
   
 PowerPlanパラメータに以下の値を設定してください。
  
 バランス・・・・・・bl
 高パフォーマンス・・hp
 省電力・・・・・・・ps
  
"@
Write-Error $Message
Exit
}

$p = Get-CimInstance -Name root\cimv2\power -Class win32_PowerPlan -Filter "ElementName = '$en'"
Invoke-CimMethod -InputObject $p -MethodName Activate
 
 


参考サイト
Use PowerShell and WMI or CIM to View and to Set Power Plans