Найти емкость диска и свободное пространство на локальном компьютере легко, но не так просто с удаленного компьютера, особенно через графический интерфейс. Гораздо проще использовать мощь PowerShell, и вот как вы можете это сделать.
Get-PSDrive — это собственный командлет PowerShell, который выводит список всех накопителей на в вашей локальной системе.
Вы можете сузить список до списка файловых систем, подключив результат в предложение Where .
Get-PSDrive | Где {$ _. Free -gt 0}
Поскольку командлет не имеет -ComputerName для доступа к удаленным компьютерам, нам понадобится Invoke-Command для запуска командлета на удаленном компьютере.
Invoke -Command -ComputerName удаленный_компьютер {Get-PSDrive | Где {$ _. Free -gt 0}}
Это хорошо работает, только если вы включить WinRM и PSRemoting на удаленных компьютерах. Вот почему мне даже больше нравится метод Get-WmiObject .
Get-WmiObject Win32_LogicalDisk -ComputerName remote_computer -Filter DriveType = 3 | Select-Object DeviceID, FreeSpace, Size
Чтобы указать размер в формате ГБ,
Get-WmiObject Win32_LogicalDisk -ComputerName удаленный_компьютер -Filter DriveType = 3 | Select-Object DeviceID, @ {'Name' = 'Размер (ГБ)'; 'Выражение' = {[математика] :: truncate ($ _. Размер/1 ГБ)}}, @ {'Имя' = 'Свободное пространство (ГБ)'; 'Expression' = {[math] :: truncate ($ _. Freespace/1GB)}}
Как насчет отображения результата с разделителями тысяч?
Get-WmiObject Win32_LogicalDisk -ComputerName remote_computer -Filter DriveType = 3 | Select-Object DeviceID, @ {'Name' = 'Размер (ГБ)'; 'Expression' = {[строка] :: Format ('{0: N0}', [math] :: truncate ($ _. Size/1GB))}}, @ {'Name' = 'Freespace (GB)' ; 'Expression' = {[строка] :: Format ('{0: N0}', [math] :: truncate ($ _. Freespace/1GB))}}
Вы можете получить доступ к нескольким удаленным компьютерам с одного запуска, поместив их все после -ComputerName ключ через запятую.
Get-WmiObject Win32_LogicalDisk -ComputerName computer1, computer2, computer3 -Filter DriveType = 3 | Select-Object DeviceID, @ {'Name' = 'Размер (ГБ)'; 'Expression' = {[строка] :: Format ('{0: N0}', [math] :: truncate ($ _. Size/1GB))}}, @ {'Name' = 'Freespace (GB)' ; 'Expression' = {[строка] :: Format ('{0: N0}', [math] :: truncate ($ _. Freespace/1GB))}}
Кроме того, вот сценарий, который я собрал, с лучшим форматированием вывода.
$ servers = @ ("computer1", "computer2", "computer3") Foreach ($ server в $ servers) {$ disks = Get-WmiObject Win32_LogicalDisk -ComputerName $ server -Filter DriveType = 3 | Select-Object DeviceID, @ {'Имя' = 'Размер'; 'Выражение' = {[математика] :: truncate ($ _. Размер/1 ГБ)}}, @ {'Имя' = 'Свободное пространство'; 'Expression' = {[math] :: truncate ($ _. Freespace/1GB)}} $ server foreach ($ disk in $ disks) {$ disk.DeviceID + $ disk.FreeSpace.ToString ("N0") + " ГБ/"+ $ disk.Size.ToString (" N0 ") +" ГБ "}}
/Обновление 9 декабря 2019 г./
Обратите внимание, что в будущем будущие версии PowerShell больше не будут поддерживать Get-WmiObject , поэтому, если вдруг вы увидите сообщение об ошибке, например «Сервер RPC недоступен», вероятно, пора переключиться на Get-CimInstance вместо этого. Параметры такие же для Win32_LogicalDisk. Просто замените Get-WmiObject на Get-CimInstance, и все готово.