Hace unos días nos consultarón como obtener el espacio en disco de un equipo o de ser posible de varios equipos remotamente, el cual si tenemos muchas opciones a elegir, desde comandos, scripts hasta aplicaciones que analizan los equipos de red.
Para hacer uso de estos, es requerido tener privilegios de administrador de la red y también iniciar las aplicaciones como administrador, por ejemplo PowerShell realizamos la búsqueda de este damos clic derecho Run As Administrator.
Comando CMD
Lo mas sencillo para consultar el espacio en disco es por medio del siguiente comando, solo que el resultado esta en Byte:
- Debemos cambiar NombreDeEquipo por la IP o el Nombre del Equipo
- Tambien LetraDeUnidad por la letra asignada al disco en el equipo (Comúnmente es C:, si no sabemos la letra podemos utilizar primero Caption en lugar de FreeSpace).
wmic /node:NombreDeEquipo logicaldisk where “DeviceID='LetraDeUnidad:'” get FreeSpace
- Si deseamos conocer la capacidad utilizamos Size en lugar de FreeSpace Ej:
wmic /node:NombreDeEquipo logicaldisk where “DeviceID='LetraDeUnidad:'” get Size
- Tambien podemos ejecutar remotamente [Ver como ejecutar comando remotamente con psexec]
fsutil volume diskfree c:
Utilizando PsTools
Podemos utilizar el comando psinfo el cual primero requerimos tener la aplicación PsTools de Sysinternals (es completamente segura descargada desde el sitio de microsoft), esta no se instala cuando vayamos a utilizar algun comando solo debemos estar dentro de la carpeta desde la linea de comando o agregar la ruta a la variable de entorno de sistema y poder ejecutarlo sin necesidad de entrar a la carpeta [Ver Como Agregar Variable de Entorno].
- Abrimos la consola CMD y escribimos el siguiente comando:
psinfo -d \\IPDelEquipoONombre
- Si requieren especificar usuario y clave.
psinfo -d \\IPDelEquipoNombre -u “usuario” -p “contraseña”
Código PowerShell
Primero debemos ejecutar el siguiente comando donde pondremos los datos del usuario con privilegios de administrador.
$cred = Get-Credential
El cual mostrara lo siguiente:
Ahora en el siguiente código en la ultima linea en NombreDeEquipo ponemos el nombre del equipo del cual deseamos obtener la información.
$Size = @{name="Size(GB)";expression={ "{0:N2}" -f ([double]$_.Size/1GB) }} $FreeSpace = @{name="FreeSpace(GB)";expression={ "{0:N2}" -f ([double]$_.FreeSpace/1GB) }} [email protected]{name="Used(GB)";expression={ "{0:N2}" -f (([double]$_.Size-[double]$_.FreeSpace)/1GB) }} [email protected]{name="PercentFree";expression={ "{0:N2}" -f ([double]$_.FreeSpace/[double]$_.Size) }} [email protected]{name="PercentUsed";expression={ "{0:N2}" -f (([double]$_.Size-[double]$_.FreeSpace)/[double]$_.Size) }} Get-WmiObject Win32_LogicalDisk -filter "DriveType=3" -computerName NombreDeEquipo | Select-Object SystemName,DeviceID,VolumeName,$Size,$FreeSpace,$used,$PercentFree,$PercentUsed
Nos dará el resultado como se muestra en la siguiente imagen.
Si desean exportarlo a Excel deben poner al finalizar la última linea lo siguiente:
| Export-Csv c:\infodisco.csv
o si desean exportarlo a TXT
| Out-File c:\infodisco.txt
Nota: Si marca error al exportar verifica que tengas privilegios para guardar en la ruta escrita, si continua el error intenta en otro folder.
Código VBScript
El usuario desde el cual se ejecuta debe tener privilegios de administrador de red, los equipos deben estar prendidos.
- El siguiente código lo copiamos y pegamos en un archivo el cual guardaremos como .vbs
- Creamos 2 archivos txt los nombramos como deseemos, uno va a estar en blanco y el otro contendrá el listado de Nombres o IPs de los equipos.
- En el código cambiamos la ruta de estos archivos en las lineas 3 y 4 (En este se muestra como c:\Resultado.txt y c:\ListadoDeEquipos.txt). Nota: Si tienen problemas de escritura en el C:\ cambien de ruta por ejemplo al escritorio.
- Ahora ejecutamos, tardara unos segundos o minutos dependiendo que tan grande sea el listado de equipos
Option Explicit const strReport = "c:\Resultado.txt" const sFile = "C:\ListadoDeEquipos.txt" Dim objWMIService, objItem, colItems Dim strDriveType, strDiskSize, txt Dim oFSO, oFile, sText,strComputer Set oFSO = CreateObject("Scripting.FileSystemObject") Dim objFSO,objTextFile Set objFSO = createobject("Scripting.FileSystemObject") Set objTextFile = objFSO.CreateTextFile(strReport) If oFSO.FileExists(sFile) Then Set oFile = oFSO.OpenTextFile(sFile, 1) Do While Not oFile.AtEndOfStream sText = oFile.ReadLine If Trim(sText) <> "" Then strComputer=sText Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk WHERE DriveType=3") txt = sText & vbtab & "Drive" & vbtab & "Size" & vbtab & "Used" & vbtab & "Free" & vbtab & "Free(%)" & vbcrlf For Each objItem in colItems DIM pctFreeSpace,strFreeSpace,strusedSpace pctFreeSpace = INT((objItem.FreeSpace / objItem.Size) * 1000)/10 strDiskSize = Int(objItem.Size /1073741824) & "Gb" strFreeSpace = Int(objItem.FreeSpace /1073741824) & "Gb" strUsedSpace = Int((objItem.Size-objItem.FreeSpace)/1073741824) & "Gb" txt = txt & vbtab & vbtab & objItem.Name & vbtab & strDiskSize & vbtab & strUsedSpace & vbTab & strFreeSpace & vbtab & pctFreeSpace & vbcrlf Next objTextFile.Write(txt) End If Loop objTextFile.Close oFile.Close Else WScript.Echo "No se encuentra el archivo." End If