Перечислите все устройства, разделы и тома в Powershell

У меня есть несколько томов (как почти все в настоящее время): в Windows они заканчиваются как C:, D: и так далее. Как мне перечислить их все как на Unix-машине с "ls /mnt/" с Powershell?

14 ответов

Решение

Чтобы получить все диски файловой системы, вы можете использовать следующую команду:

gdr -PSProvider 'FileSystem'

gdr это псевдоним для Get-PSDrive, который включает в себя все "виртуальные диски" для реестра и т. д.

Get-Volume

Вы получите: DriveLetter, FileSystemLabel, FileSystem, DriveType, HealthStatus, SizeRemaining и Size

В Windows Powershell:

Get-PSDrive 
[System.IO.DriveInfo]::getdrives()
wmic diskdrive
wmic volume

Также утилита dskwipe: http://smithii.com/dskwipe

dskwipe.exe -l

Команда Run:

Get-PsDrive -PsProvider FileSystem

Для получения дополнительной информации см.:

Во-первых, на Unix вы используете mountне ls /mnt: многие вещи не установлены в /mnt,

Во всяком случае, есть mountvol Команда DOS, которая продолжает работать в Powershell, и есть специфичная для Powershell Get-PSDrive,

Хотя это не относится к PowerShell... вы можете легко перечислить диски и разделы, используя diskpart, список томов

PS C:\Dev> diskpart

Microsoft DiskPart version 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
On computer: Box

DISKPART> list volume

Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
----------  ---  -----------  -----  ----------  -------  ---------  --------
Volume 0     D                       DVD-ROM         0 B  No Media
Volume 1         C = System   NTFS   Partition    100 MB  Healthy    System
Volume 2     G   C = Box      NTFS   Partition    244 GB  Healthy    Boot
Volume 3     H   D = Data     NTFS   Partition    687 GB  Healthy
Volume 4     E   System Rese  NTFS   Partition    100 MB  Healthy

Это довольно старый, но я нашел следующее, что стоит отметить:

PS N:\> (measure-command {Get-WmiObject -Class Win32_LogicalDisk|select -property deviceid|%{$_.deviceid}|out-host}).totalmilliseconds
...
928.7403
PS N:\> (measure-command {gdr -psprovider 'filesystem'|%{$_.name}|out-host}).totalmilliseconds
...
169.474

Без фильтрующих свойств в моей тестовой системе от 4319,4196мс до 1777,7237мс. Если мне не понадобится вернуть объект PS-Drive, я буду придерживаться WMI.

РЕДАКТИРОВАТЬ: Я думаю, что у нас есть победитель: PS N:> (measure-command {[System.IO.DriveInfo]::getdrives()|%{$_. Name}|out-host}). To‌ talmilliseconds 110.9819

Чтобы вывести список дисков:

      fsutil fsinfo drives

Также поддерживается CMD и не требует повышения прав и дополнительных сторонних разработчиков.

У нас есть несколько томов на диске (некоторые смонтированы в подкаталогах на диске). Этот код показывает список точек монтирования и меток тома. Очевидно, что вы также можете извлечь свободное пространство и так далее:

gwmi win32_volume|where-object {$_.filesystem -match "ntfs"}|sort {$_.name} |foreach-object {
  echo "$(echo $_.name) [$(echo $_.label)]"
}

Если устройство присутствует, но (еще) не смонтировано, это помогает:

      Get-PnpDevice -PresentOnly -InstanceId SCSI*

Вы также можете использовать следующее, чтобы найти «общий» размер диска на накопителе.

Get-CimInstance -ComputerName yourhostname win32_logicaldisk | foreach-object {write "$ ($ .caption) $('{0:N2}' -f ($.Size / 1gb)) всего ГБ, $('{0:N2}' -f ($_.FreeSpace / 1 ГБ)) ГБ свободно "}

Вы также можете сделать это в интерфейсе командной строки с помощью

net use

альтернативный текст

PS Функция:> get-psdrive

Другие вопросы по тегам