Solved

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

Posted on 2011-02-28
11
524 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
  • 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 53

Expert Comment

by:Bill Prew
ID: 35006533
Change

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

to

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

~bp
0
VMware Disaster Recovery and Data Protection

In this expert guide, you’ll learn about the components of a Modern Data Center. You will use cases for the value-added capabilities of Veeam®, including combining backup and replication for VMware disaster recovery and using replication for data center migration.

 
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 53

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 53

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 53

Accepted Solution

by:
Bill Prew earned 500 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 53

Expert Comment

by:Bill Prew
ID: 35013406
Welcome.

~bp
0

Featured Post

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

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

In this article we want to have a look at the directory attributes which are used by Microsoft to store the so called Security Identifiers (SID). These SIDs plays an important role in delegating and granting permissions and in authentication of trus…
Hello again, all.  For those of you that have been following along, you'll know that this is my third article on this topic (though it is not Part III).  This article is sort of remedial, and probably the topic with which I should have started the s…
Established in 1997, Technology Architects has become one of the most reputable technology solutions companies in the country. TA have been providing businesses with cost effective state-of-the-art solutions and unparalleled service that is designed…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

773 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