We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you two Citrix podcasts. Learn about 2020 trends and get answers to your biggest Citrix questions!Listen Now

x

Determine what drives are persistently mapped and read that info into log file

rtmcmullen
rtmcmullen asked
on
Medium Priority
502 Views
Last Modified: 2007-12-19
Is there a way to do this in vbscript maybe and run through a login script?  I'm trying to determine what drives are mapped persistent as we are getting greater control on the environment.  I re did the login script and want to disconnect all drives before mapping but want to see if there are any drives that are persistenly mapped so I can route accordingly..  Thanks
Comment
Watch Question

Steve KnightIT Consultancy
CERTIFIED EXPERT

Commented:
Only way I can think of is from the registry keys that store them - net use doesn't differentiate afaik.

Can't check to give you the key at the moment because I'm not on a windows machine (well windows mobile but that doesn't count)

No doubt someone else will post the key, otherwise will look back when on Windows later (or search for a share name you know is persistently mapped in regedit)

Steve
Steve KnightIT Consultancy
CERTIFIED EXPERT

Commented:
OK here are the key details:

http://www.winguides.com/registry/display.php/200/

and details of how to extract registry keys in VBS:

http://www.codeproject.com/books/1578701392.asp
Steve KnightIT Consultancy
CERTIFIED EXPERT

Commented:
Actually on the box I am on at the moment the entry as shown above doesn't appear to eb right.  Try

HKEY_CURRENT_USER\Network

under which you get a key for each drive letter then entries for RemotePath

e.g. you can read the path for the X: drive mapping with

oShell.RegRead ("HKCU\Network\X\RemotePath")

Author

Commented:
Ok, I have this which is reading it into excel, but it is reading the first drive 3 times:

' List persistent drive mappings
'Wscript.Echo oDrives.Count / 2, "Network Connections"
For ix = 0 To oDrives.Count - 2 Step 2
    sDrive = oDrives(ix)
    sUNCPath = oDrives(ix+1)
    If sDrive = "" Then sDrive = "--"
    ws.Cells(2,36).value = sDrive & " = " & sUNCPath
      ws.Cells(2,37).value = sDrive & " = " & sUNCPath
      ws.Cells(2,38).value = sDrive & " = " & sUNCPath
Next



If I do a query and echo, it will display drives in succession:

Dim oNet, oDrives, ix, sDrive, sUNCPath
Set oNet = CreateObject("Wscript.Network")
Set oDrives = oNet.EnumNetworkDrives
Wscript.Echo oDrives.Count / 2, "Network Connections"
For ix = 0 To oDrives.Count - 2 Step 2
    sDrive = oDrives(ix)
    sUNCPath = oDrives(ix+1)
    If sDrive = "" Then sDrive = "--"
    Wscript.Echo "Drive: " & sDrive, "UNC Path: " & sUNCPath
Next

I guess my question now is, how would I go about getting all drives into the excel doc in succession?
IT Consultancy
CERTIFIED EXPERT
Commented:
I guess you want:

'Wscript.Echo oDrives.Count / 2, "Network Connections"
row=35
For ix = 0 To oDrives.Count - 2 Step 2
    sDrive = oDrives(ix)
    sUNCPath = oDrives(ix+1)
    If sDrive = "" Then sDrive = "--"
    ws.Cells(2,row).value = sDrive & " = " & sUNCPath
    row=row+1
Next

But that is all drive mappings not just permanent mappings... hang on of course having said that if you run it at the start of your login script then I suppose it *would* only be permanent mappings, doh!  In which case surely even net use > something.txt would give you it too.

Steve

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts

Author

Commented:
Steve, thanks, that works great, but your right, that list all drive mappings.  To back up a little, I also want this to execute outside of a login script so I can do a audit to determine what drives are mapped persistently even for users not using login scripts.  (non standard)  I would want to run against a list of computers using a for loop to find persistent mappings.  I don't want to blow away persistent drive mappings for users once I bring everyone under a login script, rogue users, etc.,

The only thing I can think of is to read the reg key you listed:
oShell.RegRead ("HKCU\Network\X\RemotePath")

How would I go about conditioning that to read the letter and value in a script though?

Author

Commented:
If anyone is interested, I create the code below.  Thanks for your help Steve.


'==============================================================================================
' NAME: PersitentDrive.vbs
'
' AUTHOR: rtmcmullen
' CREATED : 11/2/2006
' LAST MODIFIED: 11/2/2006
' VERSION: 1.0
'
' PURPOSE: To read both Registry subkey and value to determine "Persistent" Mapped drives ONLY.  
'               Outputs information
' SYNTAX:  cscript //nologo persistentdrive.vbs
' SYNTAX to append output to log file: cscript //nologo persistentdrive.vbs >> "\\Server\Share\%COMPUTERNAME%-PeristentMappings.log"
'       Example of output created in text file:
'            Date = 2-11-2006
'            Domain\Username = AMERICAS\rtmcmulle
'            MAC Address = 00:0B:DB:C6:F6:25
'            OS = Microsoft Windows XP Professional
'            Service Pack = Service Pack 2
'            Persistent Drive Mapping = X:\\AMERICAS-WILM-APP01\APPS
'            Persistent Drive Mapping = Z:\\AMERICAS-WILM-APP01\APPS
'
'==============================================================================================

'***********************************************************************************************************
'Explicitly Declare Variables
Dim WSHNetwork, oDrives, ix, sDrive, sUNCPath, count

'***********************************************************************************************************

'Get Date
WScript.Echo "Date = " & Day(Now) & "-" & Month(Now) & "-" & Year(Now)

'***********************************************************************************************************

'Set Objects
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Set WSHNetwork = CreateObject("Wscript.Network")
Set oDrives = WSHNetwork.EnumNetworkDrives

'***********************************************************************************************************

' WMI for local computer
strComputer = "."

'***********************************************************************************************************

' Get Computer System Details
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
For Each objItem In colItems
WScript.Echo "Domain\Username = " & objItem.UserName
Next

'***********************************************************************************************************

' Get MAC Address
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE",,48)
For Each objItem In colItems
WScript.Echo "MAC Address = " & objItem.MACAddress(0)
Next

'***********************************************************************************************************

' Get OS Details
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem In colItems
WScript.Echo "OS = " & objItem.Caption
WScript.Echo "Service Pack = " & objItem.CSDVersion
Next

'***********************************************************************************************************

'Read SUBKEY (Registry KEY read using WMI query)
Const HKEY_CURRENT_USER = &H80000001
strComputer = "."

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    strComputer & "\root\default:StdRegProv")
 
strKeyPath = "Network"
oReg.EnumKey HKEY_CURRENT_USER, strKeyPath, arrSubKeys
 
For Each subkey In arrSubKeys
'          Wscript.Echo subkey
'Next
'***********************************************************************************************************

'***********************************************************************************************************
'Registry Value Read (Registry Value using shell)
Set WshShell = CreateObject ("WScript.Shell")
Path = "HKCU\Network\Z\Remotepath"
Value = WSHShell.RegRead (Path)
Wscript.Echo "Persistent Drive Mapping = " & (subkey & ":") & (Value)
'***********************************************************************************************************
Next


Steve KnightIT Consultancy
CERTIFIED EXPERT

Commented:
Thanks for giving me the points, nice script.

Steve
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.