Powershell获取磁盘信息



我打算运行此脚本来收集有关磁盘的信息。当我插入USB设备时,它应该显示名称,字母,序列号。问题是,当插入新的USB设备时,脚本会重新显示以前插入的所有磁盘的信息,而不仅仅是最后一个磁盘。

Register-WmiEvent -Class win32_VolumeChangeEvent -SourceIdentifier volumeChange
write-host (get-date -format s) " Beginning script..."
do {
        $newEvent = Wait-Event -SourceIdentifier volumeChange
        $eventType = $newEvent.SourceEventArgs.NewEvent.EventType
        $eventTypeName = switch($eventType)
        {
            1 {"Configuration changed"}
            2 {"Device arrival"}
            3 {"Device removal"}
            4 {"docking"}
        }
        write-host (get-date -format s) " Event detected = " $eventTypeName
        $diskdrive = Get-WmiObject win32_diskdrive
        if ($eventType -eq 2) 
        {   foreach($drive in $diskdrive)
            {
              out-host -InputObject "`nDevice: $($drive.deviceid.substring(4))`n  Model: $($drive.model)"
              $partitions = Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskDrive.DeviceID=`"$($drive.DeviceID.replace('','\'))`"} WHERE AssocClass = Win32_DiskDriveToDiskPartition"
              foreach($part in $partitions)
              {
                Out-Host -InputObject "  Partition: $($part.name)"
                $vols = Get-WmiObject -Query "ASSOCIATORS OF {Win32_DiskPartition.DeviceID=`"$($part.DeviceID)`"} WHERE AssocClass = Win32_LogicalDiskToPartition"
                foreach($vol in $vols)
                {
                  out-host -InputObject "  Volume: $($vol.name)"
                  $serial = Get-WmiObject -Class Win32_Volume | where { $_.Name -eq "$($vol.name)" } | select SerialNumber
                  out-host -InputObject "  Serial Number: $($serial.serialnumber)"
                  Write-EventLog -LogName Application -Source 'usb2.ps1' -EntryType Information -EventId '1' -Category 0 -Message "Date:$(get-date -format s)   Event detected:$eventTypeName   Serial:$($serial.serialnumber)   Name:$($drive.model)"
                }
              }
            }
         }
        if ($eventType -eq 3)
        {
             Write-EventLog -LogName Application -Source 'usb2.ps1' -EntryType Information -EventId '1' -Category 0 -Message "Event detected: $eventTypeName   Serial:$($serial.serialnumber)   Name:$($drive.model)"
        }
      Remove-Event -SourceIdentifier volumeChange
    } while (1-eq1) #Loop until next event
    Unregister-Event -SourceIdentifier volumeChange

因为你调用命令:

$diskdrive = Get-WmiObject win32_diskdrive

此命令为您提供每个磁盘。

如果操作是"设备到达",则启动"for"以显示有关磁盘的信息。

    if ($eventType -eq 2) 
    {   foreach($drive in $diskdrive)
        { ... }}

在此"for"中,您需要控制磁盘是否为新磁盘。因此,在启动程序之前,您必须知道插入了哪个磁盘。

此外,您可以使用WMI命令控制插入哪种类型的磁盘(不确定是否为win_32(。有一个选项可以为您提供一个数字来了解磁盘的类型(X 表示硬盘驱动器,X 表示 USB 等(。

对不起,我的英语不好,祝你好运:)

最新更新