Перечислите все устройства, разделы и тома в 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*
У Microsoft есть способ сделать это в рамках своих
az vm repair
сценарии (см. Восстановление виртуальной машины Windows с помощью команд восстановления виртуальной машины Azure ).
Он доступен по лицензии MIT по адресу: https://github.com/Azure/repair-script-library/blob/51e60cf70bba38316394089cee8e24a9b1f22e5f/src/windows/common/helpers/Get-Disk-Partitions.ps1
Вы также можете использовать следующее, чтобы найти «общий» размер диска на накопителе.
Get-CimInstance -ComputerName yourhostname win32_logicaldisk | foreach-object {write "$ ($ .caption) $('{0:N2}' -f ($.Size / 1gb)) всего ГБ, $('{0:N2}' -f ($_.FreeSpace / 1 ГБ)) ГБ свободно "}
Вы также можете сделать это в интерфейсе командной строки с помощью
net use