フォルダー サイズを汎用的に計算できるよう、Hyper-V コマンドレットは使っていません。
2015.06.10 修正
Measure-Objectを使ってフォルダー サイズを求めるスクリプトにファイルだけを抽出する機能を追加しました。
サンプル
フォルダー サイズの計算は2種類書いています。
- 単純にファイル サイズを足していく方法
- Measure-Object コマンドレットを使う方法
#集計結果を出力する関数
function Out-FolderSize
{
param(
[string]$vmName
, [double]$folderSize
)
$obj = New-Object PSObject
$obj | Add-Member NoteProperty VMName($vmName)
$obj | Add-Member NoteProperty FolderSize("{0:0.##}GB" -f $folderSize)
Write-Output $obj
}
#フォルダー サイズ計算
$path = "D:\Hyper-V"
gci -Path $path | foreach `
{
$size = 0
#ファイル サイズを一つずつ足して計算
<#
gci -Path "$path\$_" -Recurse | foreach `
{
$size += $_.Length
}
Out-FolderSize -vmName $_ -folderSize ($size/1GB)
#>
#型がFileInfoのみを抽出し、Measure-Object コマンドレットの-sum パラメーターを使ってサイズを計算
$size = gci -Path "$path\$_" -Recurse | ?{$_.GetType().Name -eq "FileInfo"} | Measure-Object -Property Length -Sum
#結果を出力
Out-FolderSize -vmName $_ -folderSize ($size.Sum/1GB)
}
尚、Out-FolderSize関数は下記のように書くこともできます。function Out-FolderSize
{
param(
[string]$vmName
, [double]$folderSize
)
$obj = New-Object PsObject | Select-Object "VMName", "FolderSize"
$obj.VMName = $vmName
$obj.FolderSize= "{0:0.##}GB" -f $folderSize
Write-Output $obj
}
余談:gciって何?
PowerShell スクリプトに不慣れな時によく思った事は
また、
これらはAlias(代替え名)と言い、入力を短縮する事でスクリプトの入力作業を効率化できます。
Aliasを確認したい場合は、
- gci
- sl
- %
- ?
また、
- foreachとForeach-Object
- selectとSelect-Object
これらはAlias(代替え名)と言い、入力を短縮する事でスクリプトの入力作業を効率化できます。
Aliasを確認したい場合は、
Get-Alias コマンドレットを実行してみましょう。