【发布时间】:2022-01-06 13:25:07
【问题描述】:
我正在尝试创建一个将驱动器号(即 D:\ 或 E:\ 等)与 USB VID/PID(即“USB\VID_XXXX&PID_XXX\XXXXXXXXXXXXXXX”)相关联的脚本。 我尝试搜索整个互联网,但除了这里的一个之外找不到任何有希望的东西:See accepted answer at the top
这个答案能够解决这个问题,但我需要它在 powershell 中。我已尝试将代码转换为 powershell,但它不起作用 如果能提供任何帮助,我将不胜感激。
注意:您可以通过以下 sn-p 获取设备 InstanceID:
#Declaring variable & getting information about all the connected USB devices
$InstanceID = ""
$ConnectedDevices = Get-PnpDevice -Class "USB"
#Applying filter for USB Mass Storage Device and storing the instance ID to be used at later stage
ForEach($USB in $ConnectedDevices)
{
If ($USB.FriendlyName -contains "USB Mass Storage Device")
{
$InstanceID = $USB.DeviceID
}
}
这是不起作用的代码(或者您可以调用失败的工作):
$AllDevices = Get-CimInstance -ClassName Win32_USBHub
$InstanceID = "USB\VID_XXXX&PID_XXX\XXXXXXXXXXXXXXX"
$AllProperties
$USBObjects
$SecondIdentity
$AllDrives = Get-CimInstance -ClassName Win32_DiskDrive
Foreach($device in $AllDevices)
{
If($device.DeviceID -like $InstanceID)
{
$AllProperties = $device
}
}
Function FindPath
{
ForEach($DeviceProperty in $AllProperties)
{
If($Device.Description -Contains "*USB Mass Storage Device")
{
$Entity = $Device.DeviceID
ForEach($Controller in $Entity.GetRelated('Win32_USBController'))
{
$USBControllerID = gwmi win32_diskdrive | %{gwmi -Query "ASSOCIATORS OF {Win32_USBController.DeviceID='" + $Controller.DeviceID + "'} WHERE AssocClass = Win32_USBController"}
ForEach($Obj in $USBControllerID)
{
If($Obj -contains "Device ID")
{
$USBObjects = $Obj.DeviceID
$USBObjects
}
}
}
}
$VidPidPosition = $USBObjects.Indexof($Entity)
for($i = $VidPidPosition; $i -le $USBObjects.Count; $i++)
{
if($USBObjects.[i] -contains "USBSTOR")
{
$SecondIdentity = $USBObjects.[i]
}
}
}
}
Function GetDriveLetter
{
FindPath
ForEach($Drive in $AllDrives)
{
If($Drive.PNPDeviceID -eq $SecondIdentity)
{
ForEach($o in $Drive.GetRelated('Win32_DiskPartition'))
{
ForEach($i in $o.GetRelated('Win32_LogicalDisk'))
{
Write-Output "Disk: " $i.Name
}
}
}
}
}
GetDriveLetter
提前致谢。
【问题讨论】:
标签: windows powershell usb script