Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

VB script to display mapped drives and printers (output to username.txt)

Posted on 2011-02-28
11
Medium Priority
?
548 Views
Last Modified: 2012-05-11
Hi guys, I have the below code (which I stole from here) but need a little help in making a small change.

Instead of the output going to a fixed filename I need it to create it based on the user's username.

In DOS it would be equivalent to "c:\folder\%username%.txt" but have no idea how to do this in VB.

Option Explicit

Const cForWriting = 2
Const cOutFile = "C:\folder\filename.txt"

Dim objFSO, objNetwork, colDrives, intDrive, intNetLetter
Dim objWMIService, objItem, colItems, strComputer, intPrinters
dim objOutFile

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutFile = objFSO.OpenTextFile(cOutFile, cForWriting, True)

Set objNetwork = CreateObject("WScript.Network")
Set colDrives = objNetwork.EnumNetworkDrives

If colDrives.Count = 0 Then
   WScript.Echo "Guy's warning: No Drives Mapped "
   Wscript.Quit
End If

objOutFile.WriteLine("Network Drives:" & vbCrLf)

For intDrive = 0 To (colDrives.Count -1) Step 2
   intNetLetter = IntNetLetter +1
   objOutFile.WriteLine("UNC Path " & intDrive & " - " & colDrives.Item(intDrive) & " Mapped drive No : " & colDrives.Item(intDrive +1))
Next

objOutFile.WriteLine("")

strComputer ="."
intPrinters = 1

' --------------------------------------------
' Pure WMI Section
Set objWMIService = GetObject ("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery ("SELECT * FROM Win32_Printer")

Call Wait() ' Goto Sub Routine at the end

' On Error Resume Next
For Each objItem In colItems
   objOutFile.WriteLine("Printers on " _
      & objItem.name & ", Printer Number: " & intPrinters & VbCrLf & _
      "====================================" & VbCrLf & _
      "Availability: " & objItem.Availability & VbCrLf & _
      "Description: " & objItem.Description & VbCrLf & _
      "Printer: " & objItem.DeviceID & VbCrLf & _
      "Driver Name: " & objItem.DriverName & VbCrLf & _
      "Port Name: " & objItem.PortName & VbCrLf & _
      "Printer State: " & objItem.PrinterState & VbCrLf & _
      "Printer Status: " & objItem.PrinterStatus & VbCrLf & _
      "PrintJobDataType: " & objItem.PrintJobDataType & VbCrLf & _
      "Print Processor: " & objItem.PrintProcessor & VbCrLf & _
      "Spool Enabled: " & objItem.SpoolEnabled & VbCrLf & _
      "Separator File: " & objItem.SeparatorFile & VbCrLf & _
      "Queued: " & objItem.Queued & VbCrLf & _
      "Status: " & objItem.Status & VbCrLf & _
      "StatusInfo: " & objItem.StatusInfo & VbCrLf & _
      "Published: " & objItem.Published & VbCrLf & _
      "Shared: " & objItem.Shared & VbCrLf & _
      "ShareName: " & objItem.ShareName & VbCrLf & _
      "Direct: " & objItem.Direct & VbCrLf & _
      "Location: " & objItem.Location & VbCrLf & _
      "Priority: " & objItem.Priority & VbCrLf & _
      "Work Offline: " & objItem.WorkOffline & VbCrLf & _
      "Horizontal Res: " & objItem.HorizontalResolution & VbCrLf & _
      "Vertical Res: " & objItem.VerticalResolution & VbCrLf & _
      "")
   intPrinters = intPrinters + 1
Next

objOutFile.Close
WScript.Quit

sub Wait()
   If strComputer = "." then
      strComputer = "Local Host"
   else 
      strComputer = strComputer
   end if

'   WScript.Echo "Wait 2 mins for " & strComputer & " to enumerate printers"

End Sub

Open in new window

0
Comment
Question by:amaru96
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 5
11 Comments
 
LVL 9

Expert Comment

by:sshah254
ID: 35003839
use this to get the username into a variable

Set wshShell = CreateObject( "WScript.Shell" )
str_username wshShell.ExpandEnvironmentStrings( "%USERNAME%" )
wshShell = Nothing

then use that username to open the appropriate file

Const cOutFile = "C:\folder\" & str_username & ".txt"

The rest of the things should remain the same.

Sandip
0
 
LVL 1

Author Comment

by:amaru96
ID: 35003931
Hi sshah, I entered that code as below but am getting an error when I run it.

Option Explicit

Set wshShell = CreateObject( "WScript.Shell" )
str_username wshShell.ExpandEnvironmentStrings( "%USERNAME%" )
wshShell = Nothing

Const cForWriting = 2
Const cOutFile = "C:\temp\" & str_username & ".txt"

Dim objFSO, objNetwork, colDrives, intDrive, intNetLetter
Dim objWMIService, objItem, colItems, strComputer, intPrinters
dim objOutFile    
vberror.jpg
0
 
LVL 57

Expert Comment

by:Bill Prew
ID: 35006533
Change

Const cOutFile = "C:\temp\" & str_username & ".txt"

to

cOutFile = "C:\temp\" & str_username & ".txt"

~bp
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
LVL 1

Author Comment

by:amaru96
ID: 35012942
Am now getting:

Line: 3
Char: 1
Error: Variable is undefined: 'wshShell'
Code: 800A01F4
Source: Microsoft VBScript runtime error

0
 
LVL 57

Expert Comment

by:Bill Prew
ID: 35013036
You will need to DIM all variables before they are used, since you have OPTION EXPLICIT. So you need at least this line, but there may be more.

Dim wshShell, str_username, cOutFile

~bp
0
 
LVL 1

Author Comment

by:amaru96
ID: 35013091
Am getting another error now.

Line: 6
Char: 1
Error: Type mismatch
Code: 800A000D

Below is the first 20 lines of my code:

Option Explicit

Dim wshShell, str_username, cOutFile

Set wshShell = CreateObject( "WScript.Shell" )
str_username wshShell.ExpandEnvironmentStrings( "%USERNAME%" )
wshShell = Nothing

Const cForWriting = 2
cOutFile = "C:\temp\" & str_username & ".txt"

Dim objFSO, objNetwork, colDrives, intDrive, intNetLetter
Dim objWMIService, objItem, colItems, strComputer, intPrinters
dim objOutFile

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutFile = objFSO.OpenTextFile(cOutFile, cForWriting, True)

Set objNetwork = CreateObject("WScript.Network")
Set colDrives = objNetwork.EnumNetworkDrives
0
 
LVL 57

Expert Comment

by:Bill Prew
ID: 35013195
Looks like an equals sign is missing.

str_username = wshShell.ExpandEnvironmentStrings( "%USERNAME%" )

~bp
0
 
LVL 1

Author Comment

by:amaru96
ID: 35013280
Error

Line: 7
Char: 1
Error: Object variable not set

Line 7 is: wshShell = Nothing

Appreciate your help so far.
0
 
LVL 57

Accepted Solution

by:
Bill Prew earned 2000 total points
ID: 35013388
You can safely remove that line (line 7).

~bp
0
 
LVL 1

Author Comment

by:amaru96
ID: 35013396
Fantastic, works great. Thanks!!
0
 
LVL 57

Expert Comment

by:Bill Prew
ID: 35013406
Welcome.

~bp
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I met Paul Devereux (@pdevereux) today when I responded to his tweet asking “Anybody know how to automate adding files from disk to a folder in #outlook  ?”.  I replied back and told Paul that using automation, in this case scripting, to add files t…
When it comes to writing scripts for a Client/Server computing environment it is essential to consider some way of enabling the authentication functionality within a script. This sort of consideration mainly comes into the picture when we are dealin…
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …
Suggested Courses

721 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