[OT] Någon som har koll på AD+LDAP+VBS?

42Hz

Aktiv medlem
[OT] Någon som har koll på AD+LDAP+VBS?
Dags för något mindre OT än fioler och banker! Många som hänger på happy jobbar med datorer så nu har jag en fråga till dom som har koll på AD och LDAP, samt förhoppningsvis lite VBscript. =)

Vad jag vill göra är att lista alla grupper som ett datorobjekt är medlem i, för att sedan lägga dessa på en annan dator så att den är med i samma grupper som den första datorn.

Jag har hittat ett skript som gör exakt det jag vill, bara det att den fungerar enbart med användarobjekt. Man exekuerar exekverar skriptet med användarnamnen man vill kopiera grupptillhörigheterna ifrån och till, som argument: CopyMembership.vbs user1 user2

Har ögnat igenom skriptet och bytt ut user-argumenten(?) till computer-argument men får bara svaret att objektnamnet inte går att hitta. Försökt se om det någonstans finns något som gör att detta enbart fungerar på användarobjekt men gått bet trots idogt googlande, kan för lite om ADSI och LDAP.

Skriptet jag använder finns här: http://windowsitpro.com/article/art...-memberships-from-one-ad-user-to-another.html

Skriptet ser ut såhär:



(Kan det ha något med bland annat ADS_NAME_TYPE_1179 att göra? Med fet stil i botten av scriptet)

' Listing 1: CopyMembership.vbs

On Error Resume Next
Const E_ADS_PROPERTY_NOT_FOUND = &h8000500D

If WScript.Arguments.Count < 2 Then
WScript.Echo "cscript copymembership.vbs <ntid1> <ntid2>"
WScript.Quit
End If

' Convert ntid1 into a DN, bind to LDAP, and check for
' ntid1's existence in AD.
' ******* BEGIN CALLOUT A *******
dn_ntid1 = dn(WScript.Arguments(0))
' ******* END CALLOUT A *******
Set objuser1 = GetObject("LDAP://" & dn_ntid1)
If Err.Number <> 0 Then
On Error GoTo 0
WScript.Echo "NT ID not found : " & WScript.Arguments(0)
WScript.Quit
End If

' Convert ntid2 into a DN, bind to LDAP, and check for
' ntid2's existence in AD.
' ******* BEGIN CALLOUT B *******
dn_ntid2 = dn(WScript.Arguments(1))
' ******* END CALLOUT B *******
Set objuser2 = GetObject("LDAP://" & dn_ntid2)
If Err.Number <> 0 Then
On Error GoTo 0
WScript.Echo "NT ID not found : " & WScript.Arguments(1)
WScript.Quit
End If

' ******* BEGIN CALLOUT C *******
' Get ntid1's group membership.
arrMemberOf = objUser1.GetEx("memberOf")

If Err.Number <> E_ADS_PROPERTY_NOT_FOUND Then
For Each Group in arrMemberOf
' Copy membership of ntid1 to ntid2.
' Group and ntid2 already in DN syntax.
add group,dn_ntid2
Next
Else
WScript.Echo "No global group found in NT ID : " & WScript.Arguments(0)
Err.Clear
WScript.Quit
End If
' ******* END CALLOUT C *******

' Subroutines and functions
Sub add(group,ntid2)
Const ADS_PROPERTY_APPEND = 3
Set objgroup=GetObject("LDAP://" & group)
objgroup.PutEx ADS_PROPERTY_APPEND, "member", Array(ntid2)
objGroup.SetInfo
WScript.Echo "NT ID " & objuser2.sAMAccountName & _
" successfully added into : " & objgroup.sAMAccountName
End Sub

' ******* BEGIN CALLOUT D *******
Function dn(ntid)
Dim objrootdse, strdnsdomain, objtrans, strnetbiosdomain
Dim struserdn, objuser
' Declare the constants for ADSI's NameTranslate object.
Const ADS_NAME_INITTYPE_DOMAIN = 1
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_1179 = 1

' Determine the DNS domain name from the RootDSE object.
Set objrootdse = GetObject("LDAP://RootDSE")
strdnsdomain = objrootdse.Get("DefaultNamingContext")

' Create the NameTranslate object, then use it to obtain the
' NetBIOS domain name from the DNS domain name.
Set objtrans = CreateObject("NameTranslate")
objtrans.init ADS_NAME_TYPE_NT4, strdnsdomain
objtrans.set ADS_NAME_TYPE_1179, strdnsdomain
strnetbiosdomain = objtrans.Get(ADS_NAME_TYPE_NT4)

' Remove the backslash.
strnetbiosdomain = Left(strnetbiosdomain, Len(strnetbiosdomain)-1)

' Use the NameTranslate object to convert the username to the DN
' for the LDAP provider.
objtrans.init ADS_NAME_INITTYPE_DOMAIN, strnetbiosdomain
objtrans.set ADS_NAME_TYPE_NT4, strnetbiosdomain & "\" & ntid
struserdn=objtrans.Get(ADS_NAME_TYPE_1179)
Set objUser = GetObject("LDAP://" & strUserDN)
dn = objuser.distinguishedname
End Function
' ******* END CALLOUT D *******
76b
 
[OT] Någon som har koll på AD+LDAP+VBS?
Sitter tyvärr inte vid någon server just nu så jag kan inte kolla. Men går det inte att komma åt grupperna via NET kommandot? Då kan du lista grupperna och jämföra med enkelt batch.
 
[OT] Någon som har koll på AD+LDAP+VBS?
Dålig koll på NET-kommandon, går det att sätta gruppbehörighet med dessa också? Bara lista grupperna har jag tyvärr inte så stor nytta av då jag vill att det hela sker automagiskt.
 
Senast redigerad av en moderator:
[OT] Någon som har koll på AD+LDAP+VBS?
Nja, kom precis in från en cykelrunda, men så fort jag är på jobbet igen så skall jag kolla upp det!!
 
[OT] Någon som har koll på AD+LDAP+VBS?
Ja, för det finns ingen annan anledning till att patcha ;-)
Men fan vad smutt powershell är. Det är nästan så att en gammal unix-räv som jag trivs.
 
Tillbaka
Topp