En este artículo, le mostraremos cómo verificar el espacio libre en disco y el uso del disco en un host de Windows local o remoto usando PowerShell. Además, considere cómo notificar al administrador con una notificación emergente o un correo electrónico si se excede el umbral de espacio libre.
Contenido:
- ¿Cómo comprobar el espacio libre de la unidad en Windows con WMI y PowerShell?
- Obtenga espacio libre en disco desde hosts remotos de Windows a través de PowerShell
¿Cómo comprobar el espacio libre de la unidad en Windows con WMI y PowerShell?
Puede obtener información sobre sus unidades lógicas en Windows utilizando el Win32_logicalDisk Clase WMI.
El siguiente comando mostrará toda la información sobre las unidades lógicas en su computadora:
Get-WmiObject -Class Win32_LogicalDisk
The term 'Get-WmiObject' is not recognized as a name of a cmdlet, function, script file, or executable program
. Utilice CIM en lugar de WMI, por ejemplo:
Get-CimInstance win32_logicaldisk
La propiedad FreeSpace contiene la cantidad de espacio libre en bytes que queda en cada una de las unidades. Para hacerlo más conveniente, puede convertirlo a GB y mostrar la cantidad de espacio libre en cada disco lógico en% (como la relación entre el espacio libre y el tamaño total del disco). Puede usar el siguiente script de 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
El script muestra una lista de unidades lógicas, su tamaño y porcentaje de espacio libre.
Para usar este script en PowerShell Core, simplemente reemplace Get-WmiObject
con Get-CimInstance
.
Si no desea simplemente mostrar la información sobre el espacio libre en un disco, sino realizar alguna acción en su lugar (enviar un correo electrónico o mostrar un mensaje emergente) si hay menos espacio libre que el umbral especificado, puede usar el script de PowerShell a continuación:
$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)
}
}
}
Este script establece valores de umbral de espacio libre que queda en un disco: 5% y 20%. Si la cantidad de espacio libre en cualquiera de los discos está por debajo de los valores especificados, se muestra una ventana de información modal. Puede mostrarlo como una notificación emergente o ejecutar inmediatamente la herramienta Liberador de espacio en disco (cleanmgr.exe
).
Si desea enviar un correo electrónico al administrador del problema, puede enviar un correo electrónico a través de un servidor SMTP (puede ser un host Exchange o cualquier otro servicio SMTP, incluso la función SMTP incorporada de Windows Server servirá) con el mensaje Send-Mail 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
Puede ejecutar el script de PowerShell con regularidad utilizando el Programador de tareas o puede configurarse como un servicio de Windows. Si no hay suficiente espacio libre en este host de Windows, un administrador recibirá una notificación.
Obtenga espacio libre en disco desde hosts remotos de Windows a través de PowerShell
El cmdlet Invoke-Command se puede utilizar para ejecutar un script PS para comprobar el espacio libre restante en equipos remotos.
Invoke-Command -ComputerName srv01,srv02,srv03 -FilePath "C:PScheckfreespace.ps1"
Si los servidores en los que desea verificar la cantidad de espacio libre están en su dominio, puede obtener la lista de ellos de Active Directory usando el cmdlet Get-ADComputer y ejecutar el script en cada host:
$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows Server*" -and enabled -eq "true"').Name
Invoke-Command -ComputerName $computers -FilePath "C:PScheckfreespace.ps1" -ErrorAction SilentlyContinue
También puede usar RemoteWMI para obtener datos de WMI desde computadoras remotas:
Get-WmiObject -Class Win32_logicalDisk -ComputerName srv01,srv02,srv03