Parallel Universe - MS Tech Blog

The ramblings of a PFE

Powershell and VBScript Comparision... USB Monitor

Powershell and VBScript Comparision... USB Monitor

  • Comments 1
  • Likes

Here was a little challenge....

I needed to write a script which i could invoke and leave run in the background and what it will do is monitor if a usb device is plugged in and out and alert you... the big thing for me is i needed to do this with no external code it all had to be within the platform

they are not perfect by any means but i think its a nice comparision on how you can achieve something in powershell and vbscript... personally i found the powershell one easier it took me about 10 mins to acheive similar results. in vbscript it took me a while longer :) but thats because i am weak with vbscript at best...


Powershell script


[array]$wmiquery = $null
$x = 0


while ($x -ne 1 )
 $wmiquery = get-wmiobject Win32_PNPENtity | where {$_.Description -like "*usb mass storage device"}
  if ($wmiquery -ne $null)
   foreach ($w in $wmiquery)
    if ($msg -eq 1)
     #this is meant to have no code :) 
     Write-Host ("Please Talk to IT about USB Device")
     $msg = 1
   $msg = 0




'Forcing Good Practice :)

option explicit

'Here are some of the variables used in the script
DIM objwmiservice, objitem, colitems,strcomputer,colstr,colstr1,collecteditem,index,msgdisplayed,test

'Initialize the relevant variables
index = 1
msgdisplayed = 0
strcomputer = "."
colstr = "USB Mass Storage Device"

'Main Script - Never Ending Loop

 'Set the WMI Path and Collection the information required, we parse on USB MAss Storage Device

 set objwmiservice = getobject ("winmgmts:\\" & strcomputer & "\root\cimv2")
 set colitems = objwmiservice.execquery( _
  "Select * From Win32_PNPEntity where Name = 'USB Mass Storage Device' ")
   'Test what we have collected, if we have displayed the message once dont display again..

   for each collecteditem in colitems
    if msgdisplayed = 0 then
     colstr1 = collecteditem.description

     if colstr1 = colstr then

      msgbox ("PLease talk to IT regarding your USB Storage Device")

      msgdisplayed = 1

     end if

    end if


 'Wait 10 mins before clearing the display variable and prompting them again..
 wscript.sleep 600000 'in msec 10mins in real terms :)
 msgdisplayed = 0

Loop until index = 2



  • Thankfully with PowerShell it's even easier than that! Check it out:

    Register-WmiEvent -Query "select * from __InstanceCreationEvent within 5 where TargetInstance ISA 'Win32_PnpEntity' and TargetInstance.Description like '%USB Mass Storage Device%'" -Action { Write-Host "Please talk to IT about your USB device." -ForegroundColor Red }


    Trevor Sullivan

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment