Cómo encontrar la capacidad del disco y el espacio libre de las computadoras remotas

Encontrar la capacidad del disco y el espacio libre de una computadora local es fácil pero no tan fácil desde una computadora remota, especialmente a través de una interfaz GUI. Es mucho más fácil utilizar el poder de PowerShell y así es como puede hacerlo.

Obtener-PSDrive es un cmdlet nativo de PowerShell que enumera todas las unidades de almacenamiento en su sistema local.

Puede limitarse a enumerar solo los sistemas de archivos canalizando el resultado a un Dónde cláusula.

Get-PSDrive | Where {$_.Free -gt 0}
imagen 24 - Cómo encontrar la capacidad del disco y el espacio libre de las computadoras remotas

Dado que el cmdlet no tiene un -Nombre del computador cambiar para acceder a computadoras remotas, necesitamos Invocar-Comando para ejecutar el cmdlet en un equipo remoto.

Invoke-Command -ComputerName remote_computer {Get-PSDrive | Where {$_.Free -gt 0}}
imagen 25 - Cómo encontrar la capacidad del disco y el espacio libre de las computadoras remotas

Esto funciona bastante bien solo cuando tienes WinRM y PSRemoting habilitados en las computadoras remotas. Y es por eso que me gusta el Get-WmiObject método aún mejor.

Get-WmiObject Win32_LogicalDisk -ComputerName remote_computer -Filter DriveType=3 | Select-Object DeviceID, FreeSpace, Size
imagen 27 - Cómo encontrar la capacidad del disco y el espacio libre de las computadoras remotas

Para enumerar el tamaño en formato GB,

Get-WmiObject Win32_LogicalDisk -ComputerName remote_computer -Filter DriveType=3 | Select-Object DeviceID, @{'Name'='Size (GB)'; 'Expression'={[math]::truncate($_.size / 1GB)}}, @{'Name'='Freespace (GB)'; 'Expression'={[math]::truncate($_.freespace / 1GB)}}
imagen 28 - Cómo encontrar la capacidad del disco y el espacio libre de las computadoras remotas

¿Qué tal mostrar el resultado con separadores de miles?

Get-WmiObject Win32_LogicalDisk -ComputerName remote_computer -Filter DriveType=3 | Select-Object DeviceID, @{'Name'='Size (GB)'; 'Expression'={[string]::Format('{0:N0}',[math]::truncate($_.size / 1GB))}}, @{'Name'='Freespace (GB)'; 'Expression'={[string]::Format('{0:N0}',[math]::truncate($_.freespace / 1GB))}}
imagen 29 - Cómo encontrar la capacidad del disco y el espacio libre de las computadoras remotas

Puede acceder a varios equipos remotos desde una ejecución colocándolos todos después de la -Nombre del computador cambiar, separados por una coma.

Get-WmiObject Win32_LogicalDisk -ComputerName computer1,computer2,computer3 -Filter DriveType=3 | Select-Object DeviceID, @{'Name'='Size (GB)'; 'Expression'={[string]::Format('{0:N0}',[math]::truncate($_.size / 1GB))}}, @{'Name'='Freespace (GB)'; 'Expression'={[string]::Format('{0:N0}',[math]::truncate($_.freespace / 1GB))}}
imagen 30 - Cómo encontrar la capacidad del disco y el espacio libre de las computadoras remotas

Además, aquí está el script que armé que tiene una salida mejor formateada.

$servers = @("computer1", "computer2", "computer3")

Foreach ($server in $servers)
{
    $disks = Get-WmiObject Win32_LogicalDisk -ComputerName $server -Filter DriveType=3 | 
        Select-Object DeviceID, 
            @{'Name'='Size'; 'Expression'={[math]::truncate($_.size / 1GB)}}, 
            @{'Name'='Freespace'; 'Expression'={[math]::truncate($_.freespace / 1GB)}}

    $server

    foreach ($disk in $disks)
    {
        $disk.DeviceID + $disk.FreeSpace.ToString("N0") + "GB / " + $disk.Size.ToString("N0") + "GB"

     }
 }

/ Actualización el 9 de diciembre de 2019 /

Tenga en cuenta que, en el futuro, las futuras versiones de PowerShell ya no admiten Get-WmiObject por lo tanto, si de repente ve un mensaje de error como “El servidor RPC no está disponible”, probablemente sea el momento de cambiar a Get-CimInstance en lugar de. Los parámetros son los mismos para Win32_LogicalDisk. Simplemente reemplace Get-WmiObject con Get-CimInstance y estará listo para comenzar.

Deja un comentario