Вопрос по – Как получить букву диска USB-накопителя в Powershell?

4

Я видел статьи на C # и некоторых других языках, в которых объясняется, как добиться того, что я ищу, но я не знаю, как их преобразовать.

Следующая ссылка объясняет, как получить ответ: Как я могу получить букву диска USB-устройства?

Win32_DiskDrive- & GT; Win32_DiskDriveToDiskPartition - & gt; Win32_DiskPartition - & gt; Win32_LogicalDiskToPartition - & gt; Win32_LogicalDisk

третий ответ вниз (от GEOCHET) объясняет также объясняет, как получить ответ, но опять же, не в PowerShell.

Как найти букву USB-накопителя?

Ваш Ответ

3   ответа
1

Начиная с PowerShell v3.0, Microsoft представляетGet-Cim* команды, которые делают это легче, чем безобразиеGet-WmiObject Метод запроса ASSOCIATORS:

Get-CimInstance -Class Win32_DiskDrive -Filter 'InterfaceType = "USB"' -KeyOnly | 
    Get-CimAssociatedInstance -ResultClassName Win32_DiskPartition -KeyOnly |
    Get-CimAssociatedInstance -ResultClassName Win32_LogicalDisk |
    Format-List *

Или же:

Get-CimInstance -Class Win32_DiskDrive -Filter 'InterfaceType = "USB"' -KeyOnly |
    Get-CimAssociatedInstance -Association Win32_DiskDriveToDiskPartition -KeyOnly |
    Get-CimAssociatedInstance -Association Win32_LogicalDiskToPartition |
    Format-List *

Вышеуказанные команды эквивалентны.

4

что тема была отброшена на некоторое время, но, поскольку это то, к чему я возвращаюсь довольно часто, я хотя и немного обновляю вещи.

Если использовать Windows 7 и выше, гораздо более простым решением будет:

Get-WmiObject Win32_Volume -Filter "DriveType='2'"

И если вы хотите избежать магических чисел:

Get-WmiObject Win32_Volume -Filter ("DriveType={0}" -f [int][System.io.Drivetype]::removable)

Рекомендации: http://msdn.microsoft.com/en-us/library/windows/desktop/aa394515(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/system.io.drivetype.aspx

Обратите внимание, что Windows не обязательно монтирует все тома USB как DriveType 2 (съемный диск) в Win32_Volume. Жесткие диски USB, которые монтируются с включенным кэшированием записи на диск, будут монтироваться как DriveType 3 (локальный диск), который будет отображаться на томе, подключенном к любому стандартному контроллеру.
7

Пытаться:

gwmi win32_diskdrive | ?{$_.interfacetype -eq "USB"} | %{gwmi -Query "ASSOCIATORS OF {Win32_DiskDrive.DeviceID=`"$($_.DeviceID.replace('\','\\'))`"} WHERE AssocClass = Win32_DiskDriveToDiskPartition"} |  %{gwmi -Query "ASSOCIATORS OF {Win32_DiskPartition.DeviceID=`"$($_.DeviceID)`"} WHERE AssocClass = Win32_LogicalDiskToPartition"} | %{$_.deviceid}

Протестировано с одним и несколькими подключенными USB-устройствами.

Спасибо, только если кто-то хочет версию без псевдонима: Get-WmiObject Win32_diskdrive | Where-Object {$ _. Interfacetype -eq & quot; USB & quot;} | ForEach-Object {Get-WmiObject -Query & quot; ASSOCIATORS OF {Win32_DiskDrive.DeviceID ="$($_.DeviceID.replace('\','\\'))& quot;} WHERE AssocClass = Win32_DiskDriveToDiskPartition & quot;} | ForEach-Object {Get-WmiObject -Query & quot; ASSOCIATORS OF {Win32_DiskPartition.DeviceID ="$($_.DeviceID)& quot;} WHERE AssocClass = Win32_LogicalDiskToPartition & quot;} | ForEach-Object {$ _. Deviceid} resolver101
Рад помочь !!
Спасибо за время написания ответа :-) resolver101

Похожие вопросы