이 기사에서는 PowerShell을 사용하여 로컬 또는 원격 Windows 호스트에서 여유 디스크 공간과 디스크 사용량을 확인하는 방법을 보여줍니다. 또한 여유 공간 임계값을 초과하는 경우 팝업 알림 또는 이메일로 관리자에게 알리는 방법을 고려하십시오.
WMI 및 PowerShell을 사용하여 Windows에서 드라이브 여유 공간을 확인하는 방법은 무엇입니까?
Win32_logicalDisk를 사용하여 Windows에서 논리 드라이브에 대한 정보를 얻을 수 있습니다. WMI 클래스.
아래 명령은 컴퓨터의 논리 드라이브에 대한 모든 정보를 표시합니다.
Get-WmiObject -Class Win32_LogicalDisk
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
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 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)
}
}
}
이 스크립트는 디스크에 남아 있는 여유 공간의 임계값(5% 및 20%)을 설정합니다. 디스크의 여유 공간이 지정된 값보다 작으면 모달 정보 창이 표시됩니다. 팝업 알림으로 표시하거나 디스크 정리 도구(cleanmgr.exe
)를 즉시 실행할 수 있습니다. ).
문제의 관리자에게 이메일을 보내려면 Send-MailMessage를 사용하여 SMTP 서버를 통해 이메일을 보낼 수 있습니다(Exchange 호스트 또는 다른 SMTP 서비스일 수 있으며 기본 제공 Windows Server SMTP 역할도 수행할 수 있음). cmdlet:
Send-MailMessage -To “[email protected]” -From “$env:[email protected]” -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
작업 스케줄러를 사용하여 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