【问题标题】:Powershell: Grab USB Drive letterPowershell:获取 USB 驱动器号
【发布时间】:2015-04-07 20:02:46
【问题描述】:

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

dir %usbdrive%

我已使用此命令显示唯一 USB 驱动器的统计信息:

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

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

【问题讨论】:

    标签: powershell usb wmi drive-letter


    【解决方案1】:

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

    $USBDrive = Get-WmiObject Win32_Volume -Filter "DriveType='2'"|select -expand driveletter
    

    现在,它确实包含一个尾随冒号,因此您可能希望将其删除,例如:

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

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

    【讨论】:

      【解决方案2】:

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

      $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"}
      

      【讨论】:

        【解决方案3】:

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

        ....
        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
        

        至于第二部分,好的TechNet blog 已经有了答案:

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

        【讨论】:

          猜你喜欢
          • 2012-05-24
          • 1970-01-01
          • 1970-01-01
          • 2011-10-02
          • 1970-01-01
          • 2019-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多