Получение списка USB устройств в Powershell


08 августа 2019


Смотрим список устройств USB в Powershell

Есть несколько возможностей просмотра устройств USB в Powershell. Самый простой - это вывести список поставщиков FileSystem и отсортировать их по размеру:

Get-PSDrive -PSProvider FileSystem | sort -Property "Used"

Минус в том, что флэшка может быть такого же размера, как и NVME диск и это не будет ясно.

Во втором варианте мы получим название, объем устройства и немного других данных, но не букву:

Get-Disk -UniqueId *USB*

Powershell usb list

Что бы получить и букву диска мы можем сделать так:

Get-Disk -UniqueId "*USB*" | Get-Partition | Get-Volume

Powershel usb letter

Получение данных о USB через Powershell WMI

Другой подход - это делать использовать несколько классов WMI. Для работы с классами WMI есть командлет Get-WMIObject.

Получить данные о съемных устройствах можно через множество классов. Один из вариантов так:

Powershell WMI

Проблема в том, что ни один из классов не показывает полную информацию о носителе. Если мы хотим узнать серийный номер, размер и букву, подойдет следующий скрипт:

$Array = @()
$USBDeviceID = Get-Disk | ? {$_.BusType -eq "USB"}
$DevPartiMap = Get-WmiObject Win32_DiskDriveToDiskPartition | Select Antecedent,Dependent
$LogicDiskMap = Get-WmiObject Win32_LogicalDiskToPartition
$LogicDisk = Get-WmiObject Win32_LogicalDisk

Foreach ($DeviceID in $USBDeviceID){
    $PhysDrive = "PHYSICALDRIVE" + "$($DeviceID.DiskNumber)"
    $DriveToPartition = $DevPartiMap | ? {$_.Antecedent -match "$PhysDrive"}
    $PartitionToLogicalD = $LogicDiskMap | ? {$_.Antecedent -eq "$($DriveToPartition.Dependent)"}
    $LogicalD = $LogicDisk | ? {($_.Path).Path -eq ($PartitionToLogicalD.Dependent)}
    $Hash = @{
        "Letter" = $LogicalD.DeviceID;
        "Number" = $DeviceID.DiskNumber;
        "Volunme Name" = $LogicalD.VolumeName;
        "Serial" = $DeviceID.SerialNumber;
        "Size (MBs)" = [system.math]::Round(($LogicalD.Size / 1MB),1);
        "Free (MBs)" = [system.math]::Round(($LogicalD.FreeSpace / 1MB),1)
    }
    $Object = New-Object -TypeName PSObject -Property $Hash
    $Array += $Object
}

Return $Array

 

...

Теги: #powershell


Каналы
Telegram FixMyPc Telegram Лента FixMyPC RSS Rss
Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, приобретённого опыта и лучшие практики в системном администрировании и программировании.