Solved

VBScript: How do I run a command that contains a object or variable?

Posted on 2009-04-07
10
341 Views
Last Modified: 2012-05-06
I am trying to write a script that will help me to copy a large number of USB Disks.  I have most of the code written but having trouble w/ a small section.  I need to run a command that uses one of output from a WMI query.  I have option explicit turned on and have "Dim'd" all necessary variables.

      formatUSB = "cmd /c format " & objItem.DeviceID, "/FS:NTFS /Q"
      WScript.Echo "Formatting USB Drive..."
      Set objShell = CreateObject ("WScript.Shell")
      Set objExec2 = objShell.Exec (formatUSB)

When I run this script, I get Expected ')" or Expected end of statement.  Is this possible to do?
0
Comment
Question by:jleleux
  • 6
  • 3
10 Comments
 
LVL 67

Expert Comment

by:sirbounty
Comment Utility
remove the comma (,) after DeviceID
0
 
LVL 67

Expert Comment

by:sirbounty
Comment Utility

formatUSB = "cmd /c format " & objItem.DeviceID " /FS:NTFS /Q"

      WScript.Echo "Formatting USB Drive..."

      Set objShell = CreateObject ("WScript.Shell")

      Set objExec2 = objShell.Exec (formatUSB)

Open in new window

0
 
LVL 38

Expert Comment

by:Shift-3
Comment Utility
You'll need another ampersand in there too.
 

formatUSB = "cmd /c format " & objItem.DeviceID & " /FS:NTFS /Q"

Open in new window

0
 
LVL 1

Author Comment

by:jleleux
Comment Utility
Now I get the following error:

Microsoft VBScript runtime error: Object required: ''
0
 
LVL 67

Expert Comment

by:sirbounty
Comment Utility
try this - if the error persists, please indicate which line throws the error.
formatUSB = "cmd /c format " & objItem.DeviceID & " /FS:NTFS /Q"

WScript.Echo "Formatting USB Drive..."

Set objShell = CreateObject ("WScript.Shell")

Set objExec2 = objShell.Exec (formatUSB)

Open in new window

0
Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

 
LVL 1

Author Comment

by:jleleux
Comment Utility
Here is the whole program, this might be more helpful.  The error is happening on line 38, col 2.

Option Explicit
'On Error Resume Next
Dim strComputer
Dim objWMIService
Dim colItems
Dim objItem
Dim copyDev
Dim formatUSB
Dim choice
Dim objShell
Dim objExec1
Dim objExec2

Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Const DriveType = 2

strComputer = "."
   WScript.Echo
   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
   Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk where DriveType =" & DriveType, _
                                         "WQL",wbemFlagReturnImmediately + wbemFlagForwardOnly)
     
Do
      For Each objItem In colItems
          WScript.Echo "DeviceID: " & objItem.DeviceID
          WScript.Echo "VolumeName: " & objItem.VolumeName
      'If objItem.VolumeName Or objItem.DeviceID    
      Next
      
      ' Copy Microsoft DevCon utility
      copyDev = "cmd /c xcopy P:\Software\Miscellaneous\devcon.exe c:\windows\system32 /y"
      WScript.Echo "Copying needed utility..."
      Set objShell = CreateObject ("WScript.Shell")
      Set objExec1 = objShell.Exec (copyDev)
      
      ' Format Drive
      formatUSB = "cmd /c format " & objItem.DeviceID & " /FS:NTFS /Q"
      WScript.Echo "Formatting USB Drive..."
      Set objShell = CreateObject ("WScript.Shell")
      Set objExec2 = objShell.Exec (formatUSB)
      
      
      ' Asks the user if they want to copy another drive or exit the script.
      WScript.StdOut.Write "Do you want to copy another drive? (y/n)"
      choice = WScript.StdIn.ReadLine
Loop While choice = "y" Or choice = "Y"
0
 
LVL 67

Expert Comment

by:sirbounty
Comment Utility
yep, it's your objitem - I'll clean up the script for you...
0
 
LVL 67

Accepted Solution

by:
sirbounty earned 500 total points
Comment Utility
Try this - unless there's more to it, there was some code that was either redundant or unnecessary...
Option Explicit

'On Error Resume Next
 

Const wbemFlagReturnImmediately = &h10

Const wbemFlagForwardOnly = &h20

Const DriveType = 2

Dim objExec, objDrive, strCommand, strDrive, choice
 

Dim objShell : Set objShell = CreateObject ("WScript.Shell")

Dim objWMIService : Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")

Dim colItems : Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk where DriveType =" & DriveType, _

                                         "WQL",wbemFlagReturnImmediately + wbemFlagForwardOnly)
 

DevConCopy 'no need to repeat per loop?
 

Dim objItem      

Do 

  For Each objItem In colItems

    WScript.Echo "DeviceID: " & objItem.DeviceID

    WScript.Echo "VolumeName: " & objItem.VolumeName

    FormatDrive (objItem.DeviceID)

  Next

 

  ' Asks the user if they want to copy another drive or exit the script.

  WScript.StdOut.Write "Do you want to copy another drive? (y/n)"

  choice = WScript.StdIn.ReadLine

Loop While choice = "y" Or choice = "Y"
 

Sub FormatDrive (strDrive)  ' Format Drive

  strCommand = "cmd /c format " & strDrive & " /FS:NTFS /Q"

  WScript.Echo "Formatting USB Drive..."

  objShell.Run strCommand

End Sub
 

Sub DevConCopy()  ' Copy Microsoft DevCon utility

  strCommand = "cmd /c xcopy P:\Software\Miscellaneous\devcon.exe c:\windows\system32 /y"

  WScript.Echo "Copying needed utility..."

  objShell.Run strCommand

End Sub

Open in new window

0
 
LVL 1

Author Closing Comment

by:jleleux
Comment Utility
Thanks all for helping a noob scripter!!!!  I really appreciate!!!!
0
 
LVL 67

Expert Comment

by:sirbounty
Comment Utility
Glad I could lend a hand - thanx for the grade! :^)
0

Featured Post

Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Recently I finished a vbscript that I thought I'd share.  It uses a text file with a list of server names to loop through and get various status reports, then writes them all into an Excel file.  Originally it was put together for our Altiris server…
This article is the result of a quest to better understand Task Scheduler 2.0 and all the newer objects available in vbscript in this version over  the limited options we had scripting in Task Scheduler 1.0.  As I started my journey of knowledge I f…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
In this tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now