Как узнать емкость диска и свободное место на удаленных компьютерах

Найти емкость диска и свободное пространство на локальном компьютере легко, но не так просто с удаленного компьютера, особенно через графический интерфейс. Гораздо проще использовать мощь 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, и все готово.

Оцените статью
toodcast.ru
Добавить комментарий