Есть несколько возможностей просмотра устройств USB в Powershell. Самый простой - это вывести список поставщиков FileSystem и отсортировать их по размеру:
Get-PSDrive -PSProvider FileSystem | sort -Property "Used"
Минус в том, что флэшка может быть такого же размера, как и NVME диск и это не будет ясно.
Во втором варианте мы получим название, объем устройства и немного других данных, но не букву:
Get-Disk -UniqueId *USB*
Что бы получить и букву диска мы можем сделать так:
Get-Disk -UniqueId "*USB*" | Get-Partition | Get-Volume
Как посмотреть версию Windows в Powershell
Получение данных о USB через Powershell WMI
Другой подход - это делать использовать несколько классов WMI. Для работы с классами WMI есть командлет Get-WMIObject.
Получить данные о съемных устройствах можно через множество классов. Один из вариантов так:
Проблема в том, что ни один из классов не показывает полную информацию о носителе. Если мы хотим узнать серийный номер, размер и букву, подойдет следующий скрипт:
$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
...
Подписывайтесь на наш Telegram канал
Теги: #powershell