Avatar billede storm2880 Nybegynder
06. november 2007 - 11:42 Der er 12 kommentarer

Semi advanceret logon script - drive mapping

Hej Alle

Jeg er desværre ikke så rutineret i VB Scripting som jeg kunne ønske mig. Jeg editerer en del, men når det kommer til ny udvikling, er det jeg ind i mellem kommer til kort.

Jeg står for at skulle ændre vores logon script rimelig radikalt.

PT har vi et logon script pr kontor (over 30) som via en portefølje af scripts, som læser nogle ini filer, og nogle settings jeg påtrykker pc`s registrerings database, hvilket ender op i nogle drive mappings.

Jeg vil i dag omlægge det til et stort logon script, da det nu kun skal håndtere drive mapping, og ikke længere inventory, software distribution osv.


Tanken er at scriptet skal læse brugerens gruppe medlemsskaber I AD, og afhængigt af dette, skal den mappe nogle driv.

Altså noget i retning af " if (instr(ucase(Groupmembership),Ucase(Group))) = sikkerhedsgruppe1 then

og så noget drev mapning.

Men jeg kan bare ikke gennemskue hvor simpelt jeg kan lave det.

Det eneste den skal er i bund og rund at læse brugeres gruppe medlems skaber i AD, se på en liste i samme script, og vurdere om der er sammenfald mellem brugerens gruppe medlems skaber, og listen af sikkerhedsgrupper som giver drev mapnings.

Jeg ved ikke om det spørgsmål er overkill her inde til. Men lad mig endelig høre hvis nogen har et bud på et sådant script.
Avatar billede Slettet bruger
06. november 2007 - 13:02 #1
Hejsa.
Prøv med noget lignende:

Kald en metode, der returnerer en gruppe som en streng, hvis brugeren er medlem af andre grupper end domain users.

' Map gruppe-specifikt drev
strGroup = GetGroupMemberships()
If strGroup <> "" Then
    MapNetworkDrive "G:", "\\fs1\" & strGroup
End If

Og selve metoden, hcor det sker.

' *************************************************
' Hent grupper for bruger
' *************************************************
Function GetGroupMemberships()
    Dim objNetwork, objUser, objGroup
    Dim strDomain, strUser, strResponse
   
    Set objNetwork = CreateObject("WScript.Network")
    strDomain = objNetwork.UserDomain
    strUser = objNetwork.UserName
   
    Set objUser = GetObject("WinNT://" & strDomain & "/" & strUser)
    For Each objGroup In objUser.Groups
        If objGroup.Name <> "Domain Users" Then
        strResponse = objGroup.Name
        End If
    Next   
    GetGroupMemberships = strResponse
End Function

Nu har jeg lavet det sådan, at der returneres en string med gruppen da jeg kun har brugere der er medlem af én enkelt gruppe, men med en smule ændringer - altså en løkke-struktur kan du lave det anderledes.
Avatar billede killerclown Nybegynder
10. november 2007 - 11:35 #2
Hey Storm !
Hvis du har flere brugere med flere medlemskaber kan du bruge ismember :

Set network = WScript.CreateObject("wscript.network")
WScript.Echo Network.UserDomain
StrMedlem = "Domain Admins" 'Gruppen, de skal  tilhøre
Set StrGruppe = GetObject("WinNT://" & Network.UserDomain & "/" & StrMedlem)
If StrGruppe.isMember("WinNT://" & Network.UserDomain & "/" & network.UserName) Then
'Map dine drev herinde
End If

/Killer
Avatar billede storm2880 Nybegynder
14. november 2007 - 15:40 #3
Hej

Tak det ser meget fornuftigt ud.

Kan man eventuelt få den til at læse indholdet af en INI fil? Så sikkerheds grupper og stier står i en INI fil, og bare selve kommandoen ligger i vbs scriptet, det er nemlig sådan det fungerer i dag, og det er nemt at rette i
Avatar billede Slettet bruger
14. november 2007 - 20:23 #4
Hejsa.

Hvad er det du vil rette?
Hvad kan være nemmere end at hente gruppemedlemskaberne direkte der hvor gruppemedlemskaberne hører hjemme, nemlig i AD?
Avatar billede storm2880 Nybegynder
14. november 2007 - 23:38 #5
Du misforstår.

Jeg vil naturligvis ikke rette noget, og naturligvis skal gruppemedlemsskaberne hentes fra AD.

Jeg vil blot have at vb scriptet skal læse mapnings dataen fra en ini fil feks

[DKGLOBALMARKETING]
\\dkdata01\marketing$

osv osv

Sådan at den ser efter gruppe navn, og sti i en ini fil. Måske for kompleks?
Avatar billede storm2880 Nybegynder
15. november 2007 - 10:11 #6
Anyway, jeg har nu forsøgt lidt frem og tilbage og det spiller ikke helt som jeg vil.

For at simplificere det, vil jeg bare lave et script pr lokation. Det bliver nok det nemmeste.

tanken er noget ala dette:

Set network = WScript.CreateObject("wscript.network")
WScript.Echo Network.UserDomain
StrMedlem = "dkcopenhagenstandard" 'Gruppen, de skal  tilhøre
Set StrGruppe = GetObject("WinNT://" & Network.UserDomain & "/" & StrMedlem)
If StrGruppe.isMember("WinNT://" & Network.UserDomain & "/" & network.UserName) Then
MapNetworkDrive "R:", "\\server1\Department"
'Map=R:;\\server1;\DEPARTMENT
'Map=S:;\\server1;\SHARED
'Map=T:;\\server1;\TEMPORARY
End If

Jeg ved godt de sidste fire linjer er noget kage, men det er fordi jeg har rodet med forskellige drive mapnings kommandoer. Men ingen af dem lader til at spille som tiltænkt.
Avatar billede storm2880 Nybegynder
15. november 2007 - 11:10 #7
Nu fik jeg faktisk det her kode til at virke

'»»» Object Declarations «««
'    On Error Resume Next
    Set WshShell=WScript.CreateObject("WScript.Shell")
    set fso=CreateObject("Scripting.FileSystemObject")
    set WshNetwork = CreateObject("WScript.Network")
    Set wmiLocator = CreateObject("WbemScripting.SWbemLocator")
    Set NameSpace = wmiLocator.ConnectServer(".", "root\default")
    Set objRegistry = NameSpace.Get ("StdRegProv")
    Const HKEY_CLASSES_ROOT  = &H80000000
    Const HKEY_CURRENT_USER  = &H80000001
    Const HKEY_LOCAL_MACHINE = &H80000002
    Const HKEY_USERS        = &H80000003

'----------------------------------------------------------------------------------------
' Map gruppe-specifikt drev
strGroup = GetGroupMemberships()
If strGroup <blablabla> "" Then
WShNetwork.MapNetworkDrive "R:", "\\server1\department"
WShNetwork.MapNetworkDrive "S:", "\\server1\Shared"
WShNetwork.MapNetworkDrive "T:", "\\server1\Temporary"
End If

strGroup = GetGroupMemberships()
If strGroup <IT Department> "" Then
WShNetwork.MapNetworkDrive "I:", "\\server1\IT"
End If


'Og selve metoden, hcor det sker.

' *************************************************
' Hent grupper for bruger
' *************************************************
Function GetGroupMemberships()
    Dim objNetwork, objUser, objGroup
    Dim strDomain, strUser, strResponse
   
    Set objNetwork = CreateObject("WScript.Network")
    strDomain = objNetwork.UserDomain
    strUser = objNetwork.UserName
   
    Set objUser = GetObject("WinNT://" & strDomain & "/" & strUser)
    For Each objGroup In objUser.Groups
        If objGroup.Name <dkcphappstandard> "Domain Users" Then
        strResponse = objGroup.Name
        End If
    Next   
    GetGroupMemberships = strResponse
End Function

Dog fejler den, efter jeg har indsat "strGroup = GetGroupMemberships()
If strGroup <IT Department> "" Then
WShNetwork.MapNetworkDrive "I:", "\\server1\IT"
End If"

Den siger expected Then.
Avatar billede Slettet bruger
15. november 2007 - 14:18 #8
Jamen kan det ikke hænge sammen med at du har dobbelt anførselstejn efter gruppenavnet?

If strGroup <IT Department> "" Then
Avatar billede storm2880 Nybegynder
15. november 2007 - 15:07 #9
Niks, fordi det virkede indtil jeg satte den næste if sætning ind altså efter jeg indsatte If strGroup <IT Department> "" Then
WShNetwork.MapNetworkDrive "I:", "\\server1\IT"
End If"

Hvis jeg fjerner det dobbelt anførsels tegn, så får den øjeblikkeligt kvalme, og fejler på noget helt andet.
Avatar billede Slettet bruger
15. november 2007 - 16:21 #10
Så fjern i det mindste " efter end if :-)

End If"

Den er jeg sikker på ikke virker i praksis.
Avatar billede storm2880 Nybegynder
15. november 2007 - 17:35 #11
Haha ja ok, det er problemet ved at belyse problemstillinger på den her måde.

Den " er slet ikke i scriptet. Det var kun i mit indlæg for at markere start og slut på det indsatte.

Scriptet er som i mit indlæg 11:10
Avatar billede Slettet bruger
15. november 2007 - 22:00 #12
Hej igen.
Jeg ved ikke om det har nogen betydning, men hvis jeg selv skulle lave det du har lavet i form af validering af specifikt gruppe-medlemskab, ville jeg ikke benytte <> rundt om gruppenavnet. Jeg ved som sagt ikke hvorfor du bruger det og har ikke testet om det vil virke, men jeg ville lave det på følgende måde:

If strGroup="IT Department" Then
WShNetwork.MapNetworkDrive "I:", "\\server1\IT"
End If

Jeg går med andre ord ud fra, at det du vil lave med denne sætning er at validere på om brugerens gruppemedlemskab inkluderer IT Department.

Gruppen, der returneres fra den metode, der trækker gruppemedlemskabet ud er jo en string, så jeg ville validere det med "" rundt om gruppenavnet.

Håber det hjælper dig på vej.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester