Avatar billede morten_leth Nybegynder
20. oktober 2004 - 11:19 Der er 12 kommentarer og
2 løsninger

Lidt begynder spørgsmål til et ADSI script.

Ja spørgsmålet går lidt på et par begynder spørgsmål jeg har fået følgende script af en kammerat som jeg godt vil have lidt hjælp til at modificere.

Option Explicit

Const strTitle = "test"

Dim objUser, strDN, arrDN, strBusiness
Dim objConnection, objCommand, objRootDSE, strDNSDomain, strUsername

strUsername = InputBox("Indtast det brugernavn du ønsker informationer om." & vbCRLF, strTitle)
If Len(strUsername) > 0 Then
  ' Bind to the group object with the LDAP provider.
  strDN = GetUserDN(strUsername)
  On Error Resume Next
  Set objUser = GetObject("LDAP://" & strDN)
  If Err.Number <> 0 Then
    On Error GoTo 0
    MsgBox "brugeren '" & strUsername & "' blev ikke fundet!!", 48, strTitle
    Wscript.Quit(1)
  End If
  On Error GoTo 0
 
  arrDN = Split(strDN, ",")
  strBusiness = arrDN(UBound(arrDN) - 4)
  MsgBox strUsername & vbTab & objUser.displayName & vbTab & Mid(strBusiness, 4, Len(strBusiness)-6), 0, strTitle
 
End If

' ---

' Converts a NT username in the current NetBIOS domains to the corresponding distinguished name
Function GetUserDN(strUserNTName)
  ' Declare variables
  Dim objRootDSE, strDNSDomain, objTrans, strNetBIOSDomain, strUserDN
  ' Create objects
  Set objTrans = CreateObject("NameTranslate")
  Set objRootDSE = GetObject("LDAP://RootDSE")
  ' Retrieve DNS domain name
  strDNSDomain = objRootDSE.Get("defaultNamingContext")
  ' Convert DNS domain name to NetBIOS domain name
  objTrans.Init 3, strDNSDomain
  objTrans.Set 1, strDNSDomain
  strNetBIOSDomain = objTrans.Get(3)
  ' Remove trailing backslash
  If Right(strNetBIOSDomain, 1) = "\" Then strNetBIOSDomain = Left(strNetBIOSDomain, Len(strNetBIOSDomain) - 1)
  ' Enable internal errorhandling and clear errorlog
  On Error Resume Next
  Err.Clear
  ' Convert NT username to Distinguished Name
  objTrans.Init 1, strNetBIOSDomain
  objTrans.Set 3, strNetBIOSDomain & "\" & strUserNTName
  ' Check for error
  If Err.Number <> 0 Then
    GetUserDN = ""
  End If
  ' Clear errorlog and disable internal errorhandling
  Err.Clear
  On Error GoTo 0
  strUserDN = objTrans.Get(1)
  ' If the returned distinguished name doesn't contain a common name (CN), then the user doesn't exist
  If InStr(strUserDN, "CN") > 0 Then
    ' Return distinguished name of the user
    GetUserDN = strUserDN
  Else
    ' Return empty string
    GetUserDN = ""
  End If
End Function


jeg vil godt have så jeg får en samlet output, fra min inputbox, så jeg kun skal trykke ok 1 gang, så jeg får det hele i en box, bare på hver sin linje...
plus jeg godt vil have den absolutte sti i AD, hvilket vil sige den ikke bare skal vise mig den overordnet OU den skal vise den OU brugeren ligger i...
Avatar billede maximus25 Nybegynder
20. oktober 2004 - 11:48 #1
jamen det fikser jeg da til dig....
Avatar billede maximus25 Nybegynder
20. oktober 2004 - 12:10 #2
hvis du skal have det hele på en linie så gør du sådan:


besked =""
besked = besked & "Bruger:"& vbTab & vbTab & vbTab & SNSet & vbCrLf
besked = besked & "User is member of following Groups:"& vbTab & vbTab & vbCrLf & vbCrLf & group & vbCrLf


Du udbygger bare med nye linjer efter behov:)
Resten må vente til senere...er ikke på AD domæne lige nu:)
Avatar billede morten_leth Nybegynder
20. oktober 2004 - 12:19 #3
kunne da være fedt... hmm... du har vel ikke en msn vel??? kunne da være max fedt hvis man evt. kunne spørge dig lidt hvis jeg er i problemer...
Avatar billede morten_leth Nybegynder
20. oktober 2004 - 12:34 #4
det jeg godt kunne tænke mig var at de kom på hver sin linje i stedet for i en lang køre...
Avatar billede maximus25 Nybegynder
20. oktober 2004 - 13:04 #5
hehe...det gør de også hvis du bruger den kode jeg postede:)

linjeskift=  & vbCrLf
tab=  vbTab
Avatar billede morten_leth Nybegynder
20. oktober 2004 - 13:22 #6
nårgh... AHHH.. nu er jeg med.. fattet.. ahh man lære hele tiden...
Avatar billede morten_leth Nybegynder
20. oktober 2004 - 15:29 #7
tjah hvis det nu er du er igang.. og kan finde ud af det kunne jeg da også godt tænke mig at vide hvilke nogen grupper personen er medlem af... hvis det kan lade sig gøre..
men hvis du ikke gider forstår jeg det godt.. jeg kan godt sætte pointene op til 200.. hehe.. hvis det er...
Avatar billede maximus25 Nybegynder
20. oktober 2004 - 15:30 #8
det kan vi nemt fikse...kigger på det:)
Avatar billede maximus25 Nybegynder
20. oktober 2004 - 15:37 #9
dette kan du bruge til at liste alle medlemmer i en OU:

On Error Resume Next

Set objGroup = GetObject _
  ("LDAP://cn=Scientists,ou=R&D,dc=NA,dc=fabrikam,dc=com")
objGroup.GetInfo

arrMemberOf = objGroup.GetEx("member")

WScript.Echo "Members:"
For Each strMember in arrMemberOf
  WScript.echo strMember
Next


Dette kan du bruge til at få informationer om hvilke grupper en user er medlem af:

On Error Resume Next
Const E_ADS_PROPERTY_NOT_FOUND  = &h8000500D

Set objUser = GetObject _
    ("LDAP://cn=MyerKen,ou=Management,dc=NA,dc=fabrikam,dc=com")

intPrimaryGroupID = objUser.Get("primaryGroupID")
arrMemberOf = objUser.GetEx("memberOf")

If Err.Number = E_ADS_PROPERTY_NOT_FOUND Then
    WScript.Echo "The memberOf attribute is not set."
Else
    WScript.Echo "Member of: "
    For each Group in arrMemberOf
        WScript.Echo Group
    Next
End If

Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = _
  "<LDAP://dc=NA,dc=fabrikam,dc=com>;(objectCategory=Group);" & _
  "distinguishedName,primaryGroupToken;subtree" 
Set objRecordSet = objCommand.Execute
 
While Not objRecordset.EOF
    If objRecordset.Fields("primaryGroupToken") = intPrimaryGroupID Then
        WScript.Echo "Primary group:"
        WScript.Echo objRecordset.Fields("distinguishedName") & _
            " (primaryGroupID: " & intPrimaryGroupID & ")"
    End If
    objRecordset.MoveNext
Wend

objConnection.Close



Håber du kan bruge det:):)

Point er man vel altid intersseret i:):)
Avatar billede maximus25 Nybegynder
21. oktober 2004 - 10:44 #10
kunne du bruge det?:)
Avatar billede morten_leth Nybegynder
21. oktober 2004 - 14:52 #11
kunne jeg ikke få dig til at give mig et eks. hvor du smider det ind i det script jeg har det, jeg har lidt svært ved at overskue den der du har taget fra microsoft, men hvis vi siger mit domæne er letnet.dk
eller kan man gøre så den selv finder ud af det..?
eller bruger de oplysninger fra det gamle script....
Avatar billede morten_leth Nybegynder
21. oktober 2004 - 15:56 #12
okay... det her det er hvad jeg øsnker så skal jeg skrive de scripts jeg egentlig godt vil have lagt sammen.. for jeg fatter det ikke.. jeg kan ikke få dem til at gøre det i hvert fald... ;)


Option Explicit

Const strTitle = "User Info"

Dim objUser, strDN, arrDN, strBusiness
Dim objConnection, objCommand, objRootDSE, strDNSDomain, strUsername

strUsername = InputBox("Indtast det brugernavn du ønsker informationer om." & vbCRLF, strTitle)
If Len(strUsername) > 0 Then
  ' Bind to the group object with the LDAP provider.
  strDN = GetUserDN(strUsername)
  On Error Resume Next
  Set objUser = GetObject("LDAP://" & strDN)
  If Err.Number <> 0 Then
    On Error GoTo 0
    MsgBox "brugeren '" & strUsername & "' blev ikke fundet!!", 48, strTitle
    Wscript.Quit(1)
  End If
  On Error GoTo 0
 
  arrDN = Split(strDN, ",")
  strBusiness = arrDN(UBound(arrDN) - 4)
  MsgBox "Brugeren hedder :" & vbTab & vbTab & "'" & strUsername & "'" _
  & vbCrLf & "Hans navn er :" & vbTab & vbTab _
  & "'" & objUser.displayName & "'" & vbCrLf & "Han er medlem af :" _
  & vbTab & vbTab & "'" & mid(strBusiness, 4) & "'", , strTitle
 
End If

' ---

' Converts a NT username in the current NetBIOS domains to the corresponding distinguished name
Function GetUserDN(strUserNTName)
  ' Declare variables
  Dim objRootDSE, strDNSDomain, objTrans, strNetBIOSDomain, strUserDN
  ' Create objects
  Set objTrans = CreateObject("NameTranslate")
  Set objRootDSE = GetObject("LDAP://RootDSE")
  ' Retrieve DNS domain name
  strDNSDomain = objRootDSE.Get("defaultNamingContext")
  ' Convert DNS domain name to NetBIOS domain name
  objTrans.Init 3, strDNSDomain
  objTrans.Set 1, strDNSDomain
  strNetBIOSDomain = objTrans.Get(3)
  ' Remove trailing backslash
  If Right(strNetBIOSDomain, 1) = "\" Then strNetBIOSDomain = Left(strNetBIOSDomain, Len(strNetBIOSDomain) - 1)
  ' Enable internal errorhandling and clear errorlog
  On Error Resume Next
  Err.Clear
  ' Convert NT username to Distinguished Name
  objTrans.Init 1, strNetBIOSDomain
  objTrans.Set 3, strNetBIOSDomain & "\" & strUserNTName
  ' Check for error
  If Err.Number <> 0 Then
    GetUserDN = ""
  End If
  ' Clear errorlog and disable internal errorhandling
  Err.Clear
  On Error GoTo 0
  strUserDN = objTrans.Get(1)
  ' If the returned distinguished name doesn't contain a common name (CN), then the user doesn't exist
  If InStr(strUserDN, "CN") > 0 Then
    ' Return distinguished name of the user
    GetUserDN = strUserDN
  Else
    ' Return empty string
    GetUserDN = ""
  End If
End Function


her er det andet...


Set Network = Wscript.CreateObject("Wscript.Network")
Set Shell = Wscript.CreateObject("Wscript.Shell")

Dim StrDomain, StrInputBox, StrBruger, StrTitel, StrGruppe

' Sætter variabler
StrDomain = Network.UserDomain
StrInputBox = "Vælg Brugernavn..."
StrBruger = InputBox("Skriv et Brugernavn.",StrInputBox,Network.UserName)

' Tester om der er tastet noget ind !
If StrBruger = "" Then
MsgBox "test ingen bruger"
Else
StrTitel = ("Viser Gruppe Medlemskab for " & "- " & StrBruger)

' Opretter en ADSI Streng
Set UserObj = GetObject("WinNT://" & StrDomain & "/" & StrBruger)

StrGruppe= "Gruppe Medlemskab for " & UserObj.Fullname & " (" & StrBruger & ") i " & StrDomain & vbCrlf & vbCrlf

' Løber igennem grupperne for at finde Medlemskaber.
For Each GroupObj In UserObj.Groups
StrGruppe = StrGruppe & GroupObj.Name & " ("& GroupObj.Description & ")" & vbCrlf
Next

' Viser Grupperne.
MsgBox StrGruppe, ,StrTitel

End If


plus at jeg godt vil have det bygget ind i at den viser den HELT rigtige OU brugeren ligger i.... ikke kun den overordnede...

men igen.. du kan godt få MAX point...
Avatar billede maximus25 Nybegynder
21. oktober 2004 - 16:10 #13
kigger på det i aften:)
Avatar billede morten_leth Nybegynder
22. oktober 2004 - 09:44 #14
ikke helt nødvendigt...

Option Explicit

Const strTitle = "User Info"

Dim objUser, strDN, arrDN, strBusiness
Dim objConnection, objCommand, objRootDSE, strDNSDomain, strUsername, strGroup, objGroup

strUsername = InputBox("Indtast det brugernavn du ønsker informationer om." & vbCRLF, strTitle)
If Len(strUsername) > 0 Then
  ' Bind to the group object with the LDAP provider.
  strDN = GetUserDN(strUsername)
  On Error Resume Next
  Set objUser = GetObject("LDAP://" & strDN)
  If Err.Number <> 0 Then
    On Error GoTo 0
    MsgBox "brugeren '" & strUsername & "' blev ikke fundet!!", 48, strTitle
    Wscript.Quit(1)
  End If
  On Error GoTo 0

  strGroup = "Gruppe Medlemskab for " & objUser.Fullname & " (" & strUsername &")" & vbCrlf & vbCrlf
  ' Løber igennem grupperne for at finde Medlemskaber
  For Each objGroup In objUser.Groups
    strGroup = strGroup & objGroup.Name & " ("& objGroup.Description & ")" & vbCRLF
  Next

  arrDN = Split(strDN, ",")
  strBusiness = strDN
  MsgBox "Brugeren hedder :" & vbTab & vbTab & "'" & strUsername & "'" _
  & vbCrLf & "Hans navn er :" & vbTab & vbTab _
  & "'" & objUser.displayName & "'" & vbCrLf & "Han er medlem af :" _
  & vbTab & vbTab & "'" & mid(strBusiness, 4) & "'" _
  & vbCrLf &vbCrlf & strGroup, , strTitle

End If

' ---

' Converts a NT username in the current NetBIOS domains to the corresponding distinguished name
Function GetUserDN(strUserNTName)
  ' Declare variables
  Dim objRootDSE, strDNSDomain, objTrans, strNetBIOSDomain, strUserDN
  ' Create objects
  Set objTrans = CreateObject("NameTranslate")
  Set objRootDSE = GetObject("LDAP://RootDSE")
  ' Retrieve DNS domain name
  strDNSDomain = objRootDSE.Get("defaultNamingContext")
  ' Convert DNS domain name to NetBIOS domain name
  objTrans.Init 3, strDNSDomain
  objTrans.Set 1, strDNSDomain
  strNetBIOSDomain = objTrans.Get(3)
  ' Remove trailing backslash
  If Right(strNetBIOSDomain, 1) = "\" Then strNetBIOSDomain = Left(strNetBIOSDomain, Len(strNetBIOSDomain) - 1)
  ' Enable internal errorhandling and clear errorlog
  On Error Resume Next
  Err.Clear
  ' Convert NT username to Distinguished Name
  objTrans.Init 1, strNetBIOSDomain
  objTrans.Set 3, strNetBIOSDomain & "\" & strUserNTName
  ' Check for error
  If Err.Number <> 0 Then
    GetUserDN = ""
  End If
  ' Clear errorlog and disable internal errorhandling
  Err.Clear
  On Error GoTo 0
  strUserDN = objTrans.Get(1)
  ' If the returned distinguished name doesn't contain a common name (CN), then the user doesn't exist
  If InStr(strUserDN, "CN") > 0 Then
    ' Return distinguished name of the user
    GetUserDN = strUserDN
  Else
    ' Return empty string
    GetUserDN = ""
  End If
End Function

Har brugt det script her... men har lige et spørgsmål.. hvordan kan man få den til at vise den sidte OU i stedet for at vise hele lortet???
jeg ved denne linje her gør den den viser nr. 4 ting den er medlem af.. men hvis jeg nu ikke er klar over hvor den ligger henne af...
eks. hvis den ligger i nr. 5 OU den skal bare vise den sidste OU brugeren er medlem af... det er det jeg ønsker.. men du kan jo lige prøve dette script.. så se hvad det gør...
men du skal nok få point.. hehe.. ;) du har jo hjulpet mig lidt...
strBusiness = arrDN(UBound(arrDN) - 4)
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