注: この記事のスクリプトを実行するときは、必ず管理者としてPowerShell®を開いてください。
PowerShellで現在のディスク使用量を確認する
Windows®サーバーのディスク不足を診断するときは、PowerShellを使用してディスクの現在の使用状況を確認することから始めます。次のコマンドを使用して、サーバー上のすべてのディスクの現在のディスク使用率を取得します。
Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq "3" } | Select-Object SystemName,
@{ Name = "Drive" ; Expression = { ( $_.DeviceID ) } },
@{ Name = "Size (GB)" ; Expression = {"{0:N1}" -f( $_.Size / 1gb)}},
@{ Name = "FreeSpace (GB)" ; Expression = {"{0:N1}" -f( $_.Freespace / 1gb ) } },
@{ Name = "PercentFree" ; Expression = {"{0:P1}" -f( $_.FreeSpace / $_.Size ) } } |
Format-Table -AutoSize | Out-String
ディスク容量が不足しているボリュームを特定したら、次のスクリプトを実行して、ディスク使用量別にトップフォルダーを特定し、領域を空ける場所を特定できるようにします。
cd \
$Table = Get-WmiObject Win32_Volume -ComputerName LocalHost `
| Format-Table Name, `
@{Name="Size(MB)";Expression={"{0:0,0.00}" -f($_.Capacity/1mb)}}, `
@{Name="Free Space(MB)";Expression={"{0:0,0.00}" -f($_.FreeSpace/1mb)}}, `
@{Name="Free (%)";Expression={"{0,6:P0}" -f(($_.FreeSpace/1mb) / ($_.Capacity/1mb))}};
$Table;$input = Read-Host -Prompt 'Input path to traverse'; Set-Location $Input;
function Get-LowDisk($maxResults=15, $startLocation=(Get-Location)){
if("$startLocation".EndsWith("\")){$startLocation = "$startLocation".TrimEnd("\")}
function Calc-Directories ($startFolder, $foldersHT=@{}, $depth=1){ $itemSum = 0L;
if($startFolder -notmatch "c\:\\Windows|System Volume Information"){
$dirList = Get-ChildItem ($startFolder) -force
$folders = $dirList | Where-Object {$_.PSIsContainer -eq $True} | Where {($_.attributes.toString() -like "*ReparsePoint*") -eq $False};
$files = $dirList | Where-Object {!$_.PSIsContainer -eq $True}; if($files){$itemSum = ($files | Measure-Object -property length -sum).sum;}
if(!$folders.Count -and $folders -ne $null){
$subFolder = "$startFolder\" + $folders;
$itemSum += Calc-Directories "$subFolder" $foldersHT ($depth+1);
}else{
for ($i=0;$i -lt $folders.Count; $i++ ){
$subFolder = "$startFolder\" + $folders[$i].Name;
if($depth -le 1){ Write-Progress -Activity "Finding Largest Folders" -status ":: Top Level Folders Progress :: $subFolder"-percentComplete ($i / $folders.count*100) -Id 1;}
$itemSum += Calc-Directories "$subFolder" $foldersHT ($depth+1);
} }
}elseif($startFolder -match "c\:\\Windows"){$itemsum=(Get-ChildItem C:\Windows -force -Recurse -ErrorAction SilentlyContinue | Measure-Object -property length -sum).sum;}
$foldersHT[$startFolder] = $itemSum;
return $itemSum;
}
$elapsed = [System.Diagnostics.Stopwatch]::StartNew();
$resultsHT = @{}; Calc-Directories $startLocation $resultsHT | Out-Null;
$formattedOutput = $resultsHT.GetEnumerator() | sort value -desc | select -First $maxResults | Format-Table -AutoSize @{Expression={$_.Name};Label="Folder Name"}, @{Expression={($_.Value / 1GB)};Label="Size (GB)";Format="{0:N2}"};
write-host "`r`n`r`n-- Total Disk Scan Time: $($elapsed.Elapsed.ToString()) --";
$Table;
write-host "`r`n-----------`r`nTop $maxResults folders by size`r`n-----------" -foregroundcolor "yellow";
return $formattedOutput;
} Get-LowDisk 15 ;
スクリプトを実行すると、トラバースするパスを入力するように求めるメッセージが表示されます。 。前のスクリプトを使用して見つけたドライブレターを入力し、 Enterを押します 続行します。
ディスク上のファイルとフォルダの数によっては、このプロセスに時間がかかる場合があることに注意してください。スクリプトが結果を返したら、リストされているフォルダーをチェックして、不要になったファイルがないかどうかを確認します。これらのファイルを削除して、ディスク領域を解放します。
警告: よく知っているファイルまたはフォルダのみを削除してください。不明なファイルやフォルダを削除すると、重要なシステムファイルやソフトウェアが失われる可能性があります。この損失により、サーバーまたはソフトウェアが機能しなくなる可能性があります。