将.bat转换为.ps1以在Windows 10工作站上查找可移动USB驱动器

时间:2017-12-29 01:24:20

标签: powershell usb

我发现以下代码几年前在互联网上搜索Window 7工作站上的任何USB可移动驱动器(记忆棒)。我仍然不完全理解“/ F”,“tokens = 1 *”,“tokens = 3”,“in(fsutil fsinfo drives)”和“in(fsutil fsinfo drivetype %% c)”。

现在我有一个新的Windows 10工作站,需要转换为PowerShell 5.任何人都可以帮助我开始如何将此.bat转换为.ps1?

我在... 少校5 未成年人1 建造16299
修订版98

@echo off
echo Workstation backup
:tryAgain
set isUSBfound=false
for /F "tokens=1*" %%a in ('fsutil fsinfo drives') do (
   for %%c in (%%b) do (
      for /F "tokens=3" %%d in ('fsutil fsinfo drivetype %%c') do (
         if %%d equ Removable (
            echo Drive %%c is Removable (USB^)
        call "F:\scripts\backups\Backup.bat" %%c
            set isUSBfound=true
         ) 
      )
   )
)
if not %isUSBfound%==true ( 
   echo USB drive not found.  Enter USB drive and press enter to try again. 
   pause
   goto tryAgain
)
date /t
time /t
pause

2 个答案:

答案 0 :(得分:0)

你可以执行一个wmi调用来提供这些信息:

$UsbDrives = Get-WmiObject -Class Win32_DiskDrive -Filter 'InterfaceType = "USB"'

If ($UsbDrives)
{
    ForEach ($Drive in $UsbDrives)
    {
        Write-Output "Drive '$($Drive.Caption)' is removable"
    }
}
Else
{
    Write-Output 'USB drive not found. Enter a USB and try again.'
}

答案 1 :(得分:0)

由于您需要从接口类型所在的磁盘驱动器走到驱动器号所在的逻辑磁盘的距离有多远,但是较新的CIM cmdlet仍然比使用{所做的一切更容易使用{1}}:

Get-WMIObject

或者:

Get-CimInstance -Class Win32_DiskDrive -Filter 'InterfaceType = "USB"' | 
    Get-CimAssociatedInstance -ResultClassName Win32_DiskPartition |
    Get-CimAssociatedInstance -ResultClassName Win32_LogicalDisk |
    Format-List *

命令是等效的。

如果您使用的是PowerShell v2.0,则无法访问Get-CimInstance -Class Win32_DiskDrive -Filter 'InterfaceType = "USB"' | Get-CimAssociatedInstance -Association Win32_DiskDriveToDiskPartition | Get-CimAssociatedInstance -Association Win32_LogicalDiskToPartition | Format-List * cmdlet。试试这个:

Get-Cim*

您可能还需要Get-WmiObject -Class Win32_DiskDrive -Filter 'InterfaceType = "USB"' | ForEach-Object { Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""$($_.DeviceID.Replace('\','\\'))""} WHERE AssocClass = Win32_DiskDriveToDiskPartition" } | ForEach-Object { Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""$($_.DeviceID.Replace('\','\\'))""} WHERE AssocClass = Win32_LogicalDiskToPartition" } | Format-List * 中存在的某些信息,但无法将上述三个类(Win32_DiskDrive,Win32_DiskPartition和Win32_LogicalPartition)直接映射到Win32_Volume。这是因为Win32_Volume表示卷装入点,这不是其他三个类中的概念。前三个类使用the WinCIM32 provider,而后者使用storage volume provider。在开始匹配之前,请注意您了解所查看的系统类型,因为它们不一定指的是相同类型的事物。存储卷提供程序是在Windows 7和Server 2008 R2中引入的,因此Win32_Volume类在此之前将不可用。