Computer >> 컴퓨터 >  >> 체계 >> Windows Server

PowerShell:여유 디스크 공간 및 디스크 사용량 확인

이 기사에서는 PowerShell을 사용하여 로컬 또는 원격 Windows 호스트에서 여유 디스크 공간과 디스크 사용량을 확인하는 방법을 보여줍니다. 또한 여유 공간 임계값을 초과하는 경우 팝업 알림 또는 이메일로 관리자에게 알리는 방법을 고려하십시오.

WMI 및 PowerShell을 사용하여 Windows에서 드라이브 여유 공간을 확인하는 방법은 무엇입니까?

Win32_logicalDisk를 사용하여 Windows에서 논리 드라이브에 대한 정보를 얻을 수 있습니다. WMI 클래스.

아래 명령은 컴퓨터의 논리 드라이브에 대한 모든 정보를 표시합니다.

Get-WmiObject -Class Win32_LogicalDisk

최신 PowerShell Core 7.x를 사용하는 경우 이 PowerShell 버전에서는 WMI가 지원되지 않습니다(PowerShell Core는 .Net Core를 기반으로 하기 때문에). Get-WmiObject 명령을 실행하려고 하면 다음 오류가 표시됩니다. The term 'Get-WmiObject' is not recognized as a name of a cmdlet, function, script file, or executable program . WMI 대신 CIM을 사용하십시오(예:

).

Get-CimInstance win32_logicaldisk

PowerShell:여유 디스크 공간 및 디스크 사용량 확인

FreeSpace 속성에는 각 드라이브에 남아 있는 바이트 단위의 여유 공간이 포함됩니다. 더 편리하게 하기 위해 GB로 변환하고 각 논리 디스크의 여유 공간을 %로 표시할 수 있습니다(총 디스크 크기에 대한 여유 공간의 비율). 다음 PowerShell 스크립트를 사용할 수 있습니다.

Get-WmiObject -Class Win32_LogicalDisk |
Select-Object -Property DeviceID, VolumeName, @{Label='FreeSpace (Gb)'; expression={($_.FreeSpace/1GB).ToString('F2')}},
@{Label='Total (Gb)'; expression={($_.Size/1GB).ToString('F2')}},
@{label='FreePercent'; expression={[Math]::Round(($_.freespace / $_.size) * 100, 2)}}|ft

PowerShell:여유 디스크 공간 및 디스크 사용량 확인

스크립트는 논리 드라이브 목록, 크기 및 여유 공간 비율을 표시합니다.

PowerShell Core에서 이 스크립트를 사용하려면 Get-WmiObject를 바꾸세요. Get-CimInstance 사용 .

디스크의 여유 공간에 대한 정보를 단순히 표시하고 싶지 않고 지정된 임계값보다 여유 공간이 적은 경우 대신 조치(이메일 보내기 또는 팝업 메시지 표시)를 수행하려면 다음을 사용할 수 있습니다. 아래 PowerShell 스크립트:

$percentWarning = 20
$percentCritcal = 5
$ListDisk = Get-WmiObject -Class Win32_LogicalDisk
Foreach($Disk in $ListDisk){
if ($Disk.size -ne $NULL) {
$DiskFreeSpace = ($Disk.freespace/1GB).ToString('F2')
$DiskFreeSpacePercent = [Math]::Round(($Disk.freespace/$Disk.size) * 100, 2)
if($DiskFreeSpacePercent -lt $percentWarning){
$Message= "Warning!"
if($DiskFreeSpacePercent -lt $percentCritcal){
$Message= "Alert!"
}
$wshell = New-Object -ComObject Wscript.Shell
$Output = $wshell.Popup("Disk $($Disk.DeviceID) has only $DiskFreeSpace GB of free space left",0,$Message,48)
}
}
}

PowerShell:여유 디스크 공간 및 디스크 사용량 확인

이 스크립트는 디스크에 남아 있는 여유 공간의 임계값(5% 및 20%)을 설정합니다. 디스크의 여유 공간이 지정된 값보다 작으면 모달 정보 창이 표시됩니다. 팝업 알림으로 표시하거나 디스크 정리 도구(cleanmgr.exe)를 즉시 실행할 수 있습니다. ).

문제의 관리자에게 이메일을 보내려면 Send-MailMessage를 사용하여 SMTP 서버를 통해 이메일을 보낼 수 있습니다(Exchange 호스트 또는 다른 SMTP 서비스일 수 있으며 기본 제공 Windows Server SMTP 역할도 수행할 수 있음). cmdlet:

Send-MailMessage -To “srv_admin@woshub.com” -From “$env:computername@woshub.com” -Subject “Insufficient disk space on server $env:computername” -Body “Disk $($Disk.DeviceID) has only $DiskFreeSpace GB left” -Credential (Get-Credential) -SmtpServer smtp.woshub.com -Port 587

이 예에서 대화형으로 SMTP 호스트에 연결하려면 자격 증명을 입력해야 합니다. 인증 없이 신뢰할 수 있는 호스트의 메시지를 수락하도록 SMTP 호스트를 구성하거나 파일에 저장된 자격 증명을 사용하여 SMTP 인증을 구성할 수 있습니다(관리 서비스 계정을 사용하여 이메일을 보낼 수 없음).

작업 스케줄러를 사용하여 PowerShell 스크립트를 정기적으로 실행하거나 Windows 서비스로 구성할 수 있습니다. 이 Windows 호스트에 여유 공간이 충분하지 않으면 관리자에게 알림이 전송됩니다.

PowerShell을 통해 원격 Windows 호스트에서 여유 디스크 공간 확보

Invoke-Command cmdlet을 사용하여 PS 스크립트를 실행하여 원격 컴퓨터의 남은 여유 공간을 확인할 수 있습니다.

Invoke-Command -ComputerName srv01,srv02,srv03 -FilePath "C:\PS\checkfreespace.ps1"

여유 공간을 확인하려는 서버가 도메인에 있는 경우 Get-ADComputer cmdlet을 사용하여 Active Directory에서 서버 목록을 가져오고 각 호스트에 대해 스크립트를 실행할 수 있습니다.

$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows Server*" -and enabled -eq "true"').Name
Invoke-Command -ComputerName $computers -FilePath "C:\PS\checkfreespace.ps1" -ErrorAction SilentlyContinue

RemoteWMI를 사용하여 원격 컴퓨터에서 WMI 데이터를 가져올 수도 있습니다.

Get-WmiObject -Class Win32_logicalDisk -ComputerName srv01,srv02,srv03

이 가이드는 디스크 공간을 모니터링하는 가장 쉬운 자체 제작 솔루션에 대해 설명합니다. 모니터링해야 하는 호스트가 많은 경우 모든 기능을 갖춘 모니터링 시스템(예:Zabbix, Icinga, PRTG, Nagios 등)을 사용하는 것이 좋습니다.