Powershell and VBScript Comparision... USB Monitor
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
cls
[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 :)
}
else
{
Write-Host ("Please Talk to IT about USB Device")
$msg = 1
}
}
}
else
{
$msg = 0
}
}
VBScript
'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
do
'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
next
'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
Comments
- Anonymous
August 03, 2011
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 } Cheers, Trevor Sullivan http://trevorsullivan.net http://twitter.com/pcgeek86