Powershell:获取USB驱动器号

Powershell:获取USB驱动器号,powershell,usb,wmi,drive-letter,Powershell,Usb,Wmi,Drive Letter,我正在尝试找出一个Powershell命令,该命令允许我捕获插入计算机的唯一USB驱动器的驱动器号,然后能够像下面这样调用该变量: dir %usbdrive% $USBDrive = (Get-WmiObject Win32_Volume -Filter "DriveType='2'").DriveLetter.Substring(0,1) 我已使用此命令显示唯一USB驱动器的状态: Get-WmiObject Win32_Volume -Filter "DriveType='2'" 但

我正在尝试找出一个Powershell命令,该命令允许我捕获插入计算机的唯一USB驱动器的驱动器号,然后能够像下面这样调用该变量:

dir %usbdrive%
$USBDrive = (Get-WmiObject Win32_Volume -Filter "DriveType='2'").DriveLetter.Substring(0,1)
我已使用此命令显示唯一USB驱动器的状态:

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

但是,如何将驱动器号存储在变量中,或者只是将驱动器号更改为完全不同的字母,如“T”

存储驱动器号很简单,您可以将结果通过管道传输到
Select-ExpandProperty DriveLetter
,而在PowerShell中,这是非常基本的,您可以将该命令的结果分配给一个变量,如:

$USBDrive = Get-WmiObject Win32_Volume -Filter "DriveType='2'"|select -expand driveletter
现在,它确实包含了一个尾随冒号,所以您可能希望将其修剪如下:

$USBDrive = $USBDrive.Trim(":")

那就只剩下驱动器的字母了。更改已知驱动器的驱动器号是另一回事。如果您真的想了解这一点,请告诉我们,或者最好发布一个新问题,询问如何更改驱动器号。

获取驱动器号的最简单方法是深入到“drivelette”属性。 这是一个[String],因此您可以使用Substring方法仅提取第一个字符,如下所示:

dir %usbdrive%
$USBDrive = (Get-WmiObject Win32_Volume -Filter "DriveType='2'").DriveLetter.Substring(0,1)
注意:仅当您只有一个USB驱动器时,此功能才起作用。在现实生活中,你应该经常检查:

$USBDrives = Get-WmiObject Win32_Volume -Filter "DriveType='2'"
if ($USBDrives  -is [system.array]){
    $USBDrive = $USBDrives[0].DriveLetter.Substring(0,1)
}else{
    $USBDrive = $USBDrives.DriveLetter.Substring(0,1)
}
要回答问题的第二部分,可以使用Set WmiInstance命令更改USB驱动器的驱动器号(和其他属性)

$USBDrives = Get-WmiObject Win32_Volume -Filter "DriveType='2'"
if ($USBDrives  -is [system.array]){
    $USBDriveLetter = $USBDrives[0].DriveLetter
}else{
    $USBDriveLetter = $USBDrives.DriveLetter
}

$USBDrive = Get-WmiObject win32_volume -Filter "DriveLetter = '$USBDriveLetter'"
Set-WmiInstance -InputObject $USBDrive -Arguments @{DriveLetter = "F:";Label = "Test"}

我觉得你并不是真的努力想弄清楚这件事。首先,您是否查看了第一个命令的输出?看看我自己机器的截断输出

....
DirtyBitSet                  : True
DriveLetter                  : H:
DriveType                    : 2
....
知道您要寻找的答案是提取属性
DriveLetter
。下面将返回“H:”。我使用
Select Object-First 1
来保证只返回一个对象

Get-WmiObject Win32_Volume -Filter "DriveType='2'" | Select-Object -First 1 -ExpandProperty Driveletter
至于第二部分,一个好的例子已经有了答案:

$drive = Get-WmiObject Win32_Volume -Filter "DriveType='2'" | Select-Object -First 1
Set-WmiInstance -input $drive -Arguments @{DriveLetter="Q:"; Label="New Label"}