[VBscript] controle of een networkmapping bestaat en waar

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Berimbau
  • Registratie: Oktober 2002
  • Laatst online: 08-10 08:04
Ik probeer in vbscript een functie te maken die mij teruggeeft of een networkmapping bestaat of niet.

Een vbscript goeroe ben ik niet bepaald en mijn scripting bestaat vooral uit het betere knip- en plakwerk.
Na wat zoeken op internet weet ik dat ik lokaal aanwezige netwerkconnecties kan opsporen met een WMI-query op Win32_Networkconnection en daaruit RemotePath moet vergelijken met een inputstring.
Hoe ik dit precies kan doen weet ik niet en ben dan ook druk op zoek naar voorbeeldcode.

Om het nog iets ingewikkelder te maken zou de functie ook nog de driveletter moeten teruggeven waarop de netwerkmapping is gezet.

Is er iemand die zoiets soortgelijks heeft gemaakt of mij opweg wil helpen? _/-\o_

Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Het commando "net use" uitvoeren en de uitkomst daarvan parsen? Of naar een bestand wegschrijven en dat inlezen en parsen?

Dit kan in elk geval redelijk eenvoudig. Voor een eerste stap:
http://www.visualbasicscript.com/m_26260/tm.htm

Hou het vooral simpel ;)

Acties:
  • 0 Henk 'm!

  • Berimbau
  • Registratie: Oktober 2002
  • Laatst online: 08-10 08:04
Even een totaalplaatje.

Ik heb een script "geschreven" die uit AD de Homeshare kan achterhalen en deze gemapt kan worden op een vrije schijfletter. Hiervoor gebruik ik WMI aanroepen.

Nu wil ik het script opleuken door te testen of de mapping al bestaat lokaal en zo ja, op welke schijfletter.


De code die ik al heb en wat werkt (zonder de netwerkmapping check):

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Option Explicit

Dim strHost, WshNetwork, sh, username, objNetwork

' Check that all arguments required have been passed.
If Wscript.Arguments.Count < 1 Then
    Wscript.Echo "Arguments <Host> required. For example:" & vbCrLf _
    & "cscript vbping.vbs savdaldc01"
    Wscript.Quit(0)
End If

strHost = Wscript.Arguments(0)

if Ping(strHost) = True then
    Set WshNetwork = WScript.CreateObject("WScript.Network") 
    Set sh = WScript.CreateObject("WScript.Shell") 
    username = sh.ExpandEnvironmentStrings("%username%")
    Wscript.Echo "Your homedirectory " & ReturnUserHomeDir(username) & " is mapped on driveletter " &  ReturnAvailableDriveletter
    Set objNetwork = CreateObject("WScript.Network") 
    objNetwork.MapNetworkDrive ReturnAvailableDriveletter , ReturnUserHomeDir(username)
Else
    Wscript.Echo "There is no network connection at all"
end if

Function Ping(strHost)

    dim objPing, objRetStatus

    set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
      ("select * from Win32_PingStatus where address = '" & strHost & "'")

    for each objRetStatus in objPing
        if IsNull(objRetStatus.StatusCode) or objRetStatus.StatusCode<>0 then
    Ping = False
        else
            Ping = True
        end if
    next
End Function 

Function ReturnUserHomeDir(username)
    Dim objConnection, objCommand, objUser, objRecordSet
    Const ADS_SCOPE_SUBTREE = 2
    
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection
    objCommand.CommandText = "Select ADsPath From " & _
    "'LDAP://DC=xx,DC=xx,DC=nl' Where objectClass='user'" & _
    " and Name = '" & username & "'"  
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst
    
    Set objUser = GetObject(objRecordSet.Fields("ADsPath").Value)
    ReturnUserHomeDir = objUser.Homedirectory
End Function

Function ReturnAvailableDriveletter
    Dim objDictionary, strComputer, colDisks, strDrive, objWMIService, objDisk, i
    Set objDictionary = CreateObject("Scripting.Dictionary")

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

    Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")

    For Each objDisk in colDisks
        objDictionary.Add objDisk.DeviceID, objDisk.DeviceID
    Next

    For i = 67 to 90
        strDrive = Chr(i) & ":"
        If objDictionary.Exists(strDrive) Then
        Else
            ReturnAvailableDriveletter = strDrive
            Exit Function
        End If
    Next    
End Function

Acties:
  • 0 Henk 'm!

  • MrDry
  • Registratie: December 2001
  • Laatst online: 13:29

MrDry

Desperados!

Wat wil je dan exact? Kijken of een schijfletter beschikbaar is of kijken of de mapping al eerder is gemaakt?

Ik gooi in ons loginscript eerst alle oude netwerkmappings weg alvorens ze opnieuw aan te maken.

Quod licet lovi, non licet bovi


Acties:
  • 0 Henk 'm!

  • Berimbau
  • Registratie: Oktober 2002
  • Laatst online: 08-10 08:04
MrDry schreef op dinsdag 18 november 2008 @ 08:43:
Wat wil je dan exact? Kijken of een schijfletter beschikbaar is of kijken of de mapping al eerder is gemaakt?

Ik gooi in ons loginscript eerst alle oude netwerkmappings weg alvorens ze opnieuw aan te maken.
Of een driveletter beschikbaar is heb ik al uitgewerkt in de code zoals je hierboven ziet. Ik wil alleen controleren of een drivemapping al is gemaakt en zo ja, aan welke letter deze is gekoppeld.

Ik wil niets weggooien in verband met "domme" gebruikers die mogelijk bestanden geopend hebben of weet ik wat fout kunnen doen.

Het wordt geen logonscript, dat is makkelijk. Onze gebruikers hebben een HSDPA/UMTS/GPRS koppeling met een mobiele provider. Als men mail wil checken of bestanden in het netwerk raadplegen moet men een SSL VPN tunnel opzetten (een niet Microsoft VPN). Hieraan kan ik geen script koppelen. Men moet dus als gebruiker zelf een snelkoppeling aanklikken waar dit script achter zit.
De gebruiker werkt echter ook wel eens aangesloten op ons netwerk en dan heeft hij sowieso zijn homedir gekoppeld. Als hij dan op de snelkoppeling klikt zou de melding moeten komen dat de homedir al gekoppeld is aan schijf x.

Acties:
  • 0 Henk 'm!

  • SteeringWheel
  • Registratie: Augustus 2004
  • Laatst online: 17-09 22:13
WScript.Network -> EnumNetworkDrives
http://msdn.microsoft.com/en-us/library/bw8941tk(VS.85).aspx
Zoiets? :)

A forum post should be like a skirt. Long enough to cover the subject material, but short enough to keep things interesting.


Acties:
  • 0 Henk 'm!

  • Berimbau
  • Registratie: Oktober 2002
  • Laatst online: 08-10 08:04
De link klopt niet helemaal, maar ik heb EnumNetworkDrives gevonden

Je bent een kanjer, dank je. Dat script kan ik voldoende herschrijven om de nodige functie te bouwen.
Pagina: 1