Cómo utilizar PowerShell para obtener espacio libre en disco [Tutorial]
Si está utilizando PowerShell para obtener espacio libre en disco en una computadora con Windows, ha venido al lugar correcto. En este tutorial, aprenderá cómo usar PowerShell para obtener espacio libre en disco y monitorear el uso del disco.
Requisitos previos
Este tutorial asumirá que estás en una computadora con Windows 10 o superior con Windows PowerShell v5.1 instalado. Lo más probable es que PowerShell 6+ también funcione bien. También se supone que estás en un entorno de Active Directory. De lo contrario, asegúrese de obtener información sobre la propiedad Credential en el cmdlet New-CimSession.
Consultando CIM
Cada pieza de información del sistema Windows se encuentra en CIM/WMI. El almacén de datos WMI tiene información sobre miles de sistemas Windows; La información del disco y del almacenamiento es solo una.
El almacén de datos CIM se divide en varias clases. WMI almacena información sobre discos en la clase Win32_LogicalDisk. La clase Win32_LogicalDisk contiene información del disco, como el nombre del disco, el tamaño total, el espacio libre, etc. Para consultar esta clase con PowerShell, debe crear una instancia CIM con el cmdlet Get-CimInstance.
Usar Get-CimInstance especificando solo el parámetro ClassName es la forma más sencilla de consultar la clase.
Get-CimInstance -ClassName Win32_LogicalDisk
Get-CimInstance devolverá un objeto de PowerShell para cada volumen de almacenamiento encontrado, como se muestra a continuación.
Observe que Get-CimInstance devuelve una propiedad FreeSpace adjunta a cada objeto de volumen de almacenamiento devuelto. La propiedad FreeSpace es con lo que necesita trabajar.
Limitar el nombre del disco de salida CIM y el espacio libre
Suponiendo que no necesita toda la información devuelta con Get-CimInstance, ahora deberá limitar lo que verá. Supongamos que solo desea ver el nombre de la letra de la unidad (DeviceID) y la cantidad de espacio libre (FreeSpace). Para hacer eso, puede recortar la salida con Select-Object.
Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,FreeSpaceAhora tienes un pequeño informe sobre el espacio libre en disco.
Conversión de espacio en disco de bytes a gigabytes
Aunque ahora tiene un comando para buscar espacio libre en el disco, algo parece extraño. Probablemente puedas notar que FreeSpace no está definido en GB; en realidad está definido en bytes. De todos modos, ¿quién necesita ese nivel de granularidad? Convirtamos bytes a gigabytes más legibles.
Para realizar la conversión, primero debes dividir los bytes por 1GB. Por ejemplo, en este caso, sabe que el disco C: contiene 210155110400 bytes de espacio libre en disco. Para convertir bytes a gigabytes, puede dividir ese número por 1GB como se muestra a continuación.
210155110400 / 1GBVerás que la unidad C: tiene un total de 195 GB y algunos cambios.
Te estás acercando. Lo más probable es que estuvieras buscando un buen número redondo pero no lo obtuviste con esa conversión. ¡Sin sudar! Debes hacer una última cosa, que es redondear los gigabytes al número entero más cercano.
Una de las formas más sencillas de "redondear" decimales al número entero más cercano es convertirlos a un número entero como se muestra a continuación. Verás que el número está redondeado. Este método es más rápido que usar el método Round().
[int](210155110400 / 1GB)Embelleciendo la salida de espacio en disco
Ahora que sabes cómo convertir los bytes de espacio libre en gigabytes, incorpora esta técnica a tu script. Una de las mejores formas de hacerlo es con propiedades calculadas. Las propiedades calculadas le permiten ejecutar código en los valores de las propiedades para cambiarlos.
Las propiedades calculadas le permiten definir un valor de propiedad como un bloque de script que es esencialmente una unidad de código portátil.
El código que tiene hasta ahora solo devuelve la etiqueta del disco (DeviceID) y el espacio libre (FreeSpace) que se muestran en bytes como se muestra a continuación.
Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,FreeSpaceAhora cree su propia propiedad FreeSpace solo que esta vez está representada en gigabytes.
Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'FreeSpace (GB)'; Expression= { [int]($_.FreeSpace / 1GB) }}¡Eso está mucho mejor! Ahora tienes exactamente la información que estabas buscando.
Bonificación: agrupar espacio libre
En el ejemplo anterior, creó un comando para devolver espacio libre para cada volumen. Tal vez no le importe cada volumen y prefiera obtener un espacio libre total en disco de todos los volúmenes de la computadora.
Tal vez esté creando un script que procesará muchas máquinas a la vez y desea que el resultado se vea así:
ServerName FreeSpace
---------- ---------
SRV1 195
SRV2 45
En ese caso, debe agrupar todas las filas devueltas en el ejemplo anterior y sumar todas las filas FreeSpace utilizando el cmdlet Measure-Object. Este cmdlet toma una entrada de varios objetos, lee la propiedad y luego realiza alguna operación.
Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'FreeSpace (GB)'; Expression= { [int]($_.FreeSpace / 1GB) }} | Measure-Object -Property 'FreeSpace (GB)' -SumAhora puede ver que la propiedad Sum devuelta por Measure-Object es 1998, que es la cantidad total de espacio libre en gigabytes que tiene esta computadora.
Finalmente, elimine todas las propiedades no deseadas y simplemente devuelva la cantidad total de espacio libre.
(Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'FreeSpace (GB)'; Expression= { [int]($_.FreeSpace / 1GB) }} | Measure-Object -Property 'FreeSpace (GB)' -Sum).SumConclusión
Encontrar el uso del disco y el espacio libre en el disco con PowerShell solo requiere una línea, ¡pero primero debes saber cómo crearlo! En este tutorial, aprendió a usar PowerShell para obtener espacio libre en el disco y formatear la salida a su gusto.
Mejore este código. ¡Vea si puede crear un script para ejecutar este código en muchos servidores a la vez!




