Zum Inhalt wechseln


Foto

Active Directory Daten in Word


  • Bitte melde dich an um zu Antworten
31 Antworten in diesem Thema

#1 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 23. Januar 2012 - 10:44

Hallo zusammen,

für eine Word 2007 Vorlage sollen Daten aus dem Active Directory ausgelesen werden.

ABER: Es soll nur einmal ausgelesen werden und dann in eine Zwischendatei gespeichert werden und aus dieser Zwischendatei sollen dann in Zukunft die Daten ausgelesen werden damit auch Notebooknutzer die Vorlagen nutzen können wenn diese unterweg sind.

Es gibt ja eine Möglichkeit mit Hilfe von Textmarken dies zu machen, nur fragt er dann jedesmal vom AD ab und das darf nicht.

Hoffe ihr könnt mir helfen.

Gruß
Praktik

#2 marka

marka

    Moderator

  • 5.201 Beiträge

 

Geschrieben 23. Januar 2012 - 11:18

Erstmal willkommen an Board!

Um Dir besser helfen zu können, würde uns helfen, wenn wir etwas mehr Informationen über das erhalten würden, was Ihr wollt.

Welche Informationen werden zum Beispiel aus dem AD gezogen?
Welche Daten müssen denn "Offline" zur Verfügung stehen?

So können wir uns ein besseres Bild davon machen und ggf. Alternativwege aufzeigen...

Viele Grüße von der Nordsee
Markus

 

In einem Forum ist es wie bei einem Fototermin - immer recht freundlich!
Kein Support per PN oder E-Mail, bitte im Forum posten, dann haben alle etwas davon ;)


#3 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 23. Januar 2012 - 11:23

Hi,

also die Daten stehen in einem Textfeld und sieht wie folgt aus:

Abteilung
[Abteilungsname]
[Vor- und Nachname]
Durchwahl: -000
[Email]

Und das sind auch die Daten, die dann offline zur Verfügung stehen sollen.

In den Word Optionen gibt es unter Erweitert ja das Feld Postanschrift in dem man das eintragen kann. Aber dann muss man es ja per Hand machen.

Das hier hatte ich bisher gefunden, nur dafür muss man halt immer mit der Domäne verbunden sein:

http://www.sysadminl...-word-templates

Vielleicht funktioniert es ja so: Wenn der User sich anmeldet wird ein Skript ausgeführt das Daten aus dem Active Directory ausliest und in eine Datei schreibt und Word liest dann die Daten aus dieser Datei aus. So oder so ähnlich. ^_^

Gruß
Praktik

Bearbeitet von Praktik, 23. Januar 2012 - 11:43.


#4 NilsK

NilsK

    Expert Member

  • 12.457 Beiträge

 

Geschrieben 23. Januar 2012 - 12:13

Moin,

ja, natürlich, das geht. Ihr müsstet also die Formeln in eurer Vorlage so ändern, dass sie die lokal gespeicherte Datei auswerten, statt eine Verbindung ins AD aufzubauen.

Die Daten selbst kann man, wie du vorschlägst, z.B. mit einem VBS-Skript beim Logon aus dem AD lesen und in eine Datei schreiben. Falls kein Connect zum AD besteht, bleibt die Datei unangetastet.

Gruß, Nils

Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#5 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 23. Januar 2012 - 12:54

das freut mich, dass das geht. Wenn du mir jetzt noch sagen kannst wie das geht, wäre das echt super :)

#6 NilsK

NilsK

    Expert Member

  • 12.457 Beiträge

 

Geschrieben 23. Januar 2012 - 13:17

Moin,

da ich den Code eurer Vorlage nicht kenne und darüber hinaus auch kein Office-Entwickler bin, kann ich dir das leider nicht sagen.

Allgemein wirst du hier aber auch keine fertigen Lösungen serviert bekommen, sondern Hinweise bei konkreten Fehler- oder Problemsituationen.

Hinweise zum Auslesen von Werten aus dem AD findest du im Internet einige, z.B. hier:
faq-o-matic.net » Ein AD-Attribut zu einem Logon-Namen herausfinden

Gruß, Nils


Gruß, Nils

Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#7 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 23. Januar 2012 - 13:25

Hi,

derzeit gibt es noch keinen Code in der Vorlage, den soll ich ja gerade herausfinden womit ich leider nicht weiter komme :(

Ich muss wissen, wie bei der Anmeldung Daten aus dem AD lokal in einer Datei gespeichert werden und welcher Befehl/Code bei Word stehen muss damit diese Datei ausgelesen wird.

Im Internet findet man dazu aber nichts also bleiben mir nur Foren und die waren bis jetzt leider auch nicht sehr Hilfreich.

Gruß
Praktik

#8 Sunny61

Sunny61

    Expert Member

  • 22.225 Beiträge

 

Geschrieben 23. Januar 2012 - 15:56

derzeit gibt es noch keinen Code in der Vorlage, den soll ich ja gerade herausfinden womit ich leider nicht weiter komme :(


Hast Du denn mit VB Scripten schon einmal gearbeitet?

Ich muss wissen, wie bei der Anmeldung Daten aus dem AD lokal in einer Datei gespeichert werden und welcher Befehl/Code bei Word stehen muss damit diese Datei ausgelesen wird.


Zum auslesen von Daten aus dem AD hat dir Nils schon den richtigen Hinweis gegeben. Testen und anpassen mußt Du selbst, auch wenn dir das nicht passt.

Um eine Textdatei zu erstellen und Werte einzutragen, findest Du hier ein Beispiel: VBSCript: CreateTExtFile | JavaScript u.a. Script-Sprachen | wer-weiss-was Mit etwas Einsatz und guten Willen bekommst Du das alles zusammen in ein Script.

Wie Du dann in Word auf diese TXT zugreifen kannst, weiß ich auch nicht. Aber in einem Word Forum sollte sich das finden lassen.

Im Internet findet man dazu aber nichts also bleiben mir nur Foren und die waren bis jetzt leider auch nicht sehr Hilfreich.


Die Foren sind im Internet und wenn ich danach suche, werde ich erschlagen mit Ergebnissen. Mir dünkt, Du hast bisher noch gar nicht richtig gesucht.
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#9 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 23. Januar 2012 - 16:04

Hast Du denn mit VB Scripten schon einmal gearbeitet?

Nein

Wie Du dann in Word auf diese TXT zugreifen kannst, weiß ich auch nicht. Aber in einem Word Forum sollte sich das finden lassen.

Sieht bisher aber nicht danach aus

Die Foren sind im Internet und wenn ich danach suche, werde ich erschlagen mit Ergebnissen. Mir dünkt, Du hast bisher noch gar nicht richtig gesucht.


Mir ist schon klar das die Foren im Internet sind, ich meinte über Google habe ich nichts dergleichen gefunden also bleibt mir nur das eigene Nachfragen über Foren.
Und dir dünkt falsch, denn ich bin schon den ganzen Tag auf der Suche nach einer Lösung...

Um AD Daten in eine txt Datei zu bringen habe ich bisher diesen Befehl gefunden:

@echo off & setlocal
set "G=%temp%\GetL.vbs"
>"%G%" echo WScript.Echo GetObject("LDAP://" ^& CreateObject("ADSystemInfo").UserName).l
for /f "delims=" %%i in ('cscript //nologo "%G%"') do set "Ort=%%i"
echo %Ort%


Allerdings gibt der nur ein Attribut wieder und nicht mehrere. Aber selbst wenn ich das komplett hätte, wüsste ich dennoch nicht wie ich das in eine Word Datei importieren kann. Ein weiterer Arbeitstag an dem ich nicht weiter gekommen bin... :(

Ich habe auch noch dieses Makro gefunden, dass aber auch nicht funktioniert:

Sub Insert_EinzelZahlungen()
Dim oDoc As Document
Set oDoc = ActiveDocument
Dim nDoc As Document
Set nDoc = Documents.Open(FileName:="c:\test.txt", Visible:=False)
oDoc.Bookmarks("test").Range.Text = nDoc.Range.Text
nDoc.Close
End Sub


Bearbeitet von Praktik, 23. Januar 2012 - 16:51.


#10 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 23. Januar 2012 - 16:51

Und wenn ihr noch nicht genug habt, dann könntet ihr mir ja vll. bei diesem Skript helfen:

Sub TextImport()

Dim dlgtext As FileDialog
Dim strText As String
Dim rng As Word.Range
Dim bmkBeginn As Word.Bookmark
Dim bmkEnde As Word.Bookmark

Dim fsize As Long
Dim fentry As Single

fsize = 9
fentry = 2

Set dlgtext = Application.FileDialog(msoFileDialogFilePicker)
dlgtext.Title = "Auswahl der Textdatei"
dlgtext.Filters.Add "Textdateien", "*.txt", 1
dlgtext.ButtonName = "Import"

With dlgtext
If .Show = -1 Then
strText = dlgtext.SelectedItems.Item(1)
' frmText.Show

Set rng = Selection.Paragraphs(1).Range.Duplicate
rng.Collapse wdCollapseStart
rng.InsertParagraph
rng.Collapse wdCollapseEnd
Set bmkEnde = rng.Bookmarks.Add(Name:="BMEnde", Range:=rng)
rng.Collapse wdCollapseStart
rng.MoveEnd wdParagraph, -1
rng.Collapse wdCollapseStart
rng.InsertFile (strText)
rng.Collapse wdCollapseStart
Set bmkBeginn = rng.Bookmarks.Add(Name:="BMBeginn", Range:=rng)
Set rng = ActiveDocument.Range(Start:=bmkBeginn.Range.Start, End:=bmkEnde.Range.End)
With rng
.Font.Size = fsize
.ParagraphFormat.Alignment = wdAlignParagraphLeft
.ParagraphFormat.LeftIndent = CentimetersToPoints(fentry)
.Bookmarks.Add Name:="Einfuegetext", Range:=rng
.Collapse wdCollapseEnd
End With
Call TexteFormatieren(ActiveDocument.Bookmarks("Einfuegetext").Range)
End If
End With
dlgtext.Filters.Clear
Set dlgtext = Nothing
Set rng = Nothing
Set bmkBeginn = Nothing
Set bmkEnde = Nothing

End Sub

Sub TexteFormatieren(ByVal rngTM As Word.Range)

Dim para As Word.Paragraph

For Each para In rngTM.Paragraphs
If InStr(1, para.Range.Text, "Pressures:", vbTextCompare) > 0 Then
para.Range.Font.Bold = True
para.Range.Font.Underline = wdUnderlineSingle
End If
Next para

End Sub


Was bei diesem Skript verändert werden müsste wäre:

Das er die .txt Datei automatisch einliest, das Makro würde zu einer Vorlage gehören und beim öffnen soll die .txt Datei eingelesen werden.
Und das die Schriftart und größe automatisch umgewandelt wird.

Gruß
Praktik

#11 Sunny61

Sunny61

    Expert Member

  • 22.225 Beiträge

 

Geschrieben 25. Januar 2012 - 07:37

Nein
Um AD Daten in eine txt Datei zu bringen habe ich bisher diesen Befehl gefunden:


Allerdings gibt der nur ein Attribut wieder und nicht mehrere. Aber selbst wenn ich das komplett hätte, wüsste ich dennoch nicht wie ich das in eine Word Datei importieren kann. Ein weiterer Arbeitstag an dem ich nicht weiter gekommen bin... :(


Man muss sich mit dem scripten schon etwas beschäftigen, und Nils hat dir schon die richtige Vorlage genannt, Du mußt etwas mehr draus machen. Hier mal ein Script das sehr viel macht. Wegen der Zeichenbegrenzung auf das nötigste reduziert.

'Das Script liest verschiedene Attribute des angemeldeten Benutzers aus dem Benutzerobjekt im Ad aus.

    Dim WshShell
    Dim WshSysEnv
    Dim strUserDNSDomain, strUser, strVollstaendig
    Dim strName, strOfficeName, strTelNo, strNebenstelle, strFaxNo, strFaxKurz, strmail, strOrt, strBeschreibung, strAbteilung
    Dim strChef, strChefName
    Dim regBenutzerEinstellungen, regSchluessel, regGWGLDR
    
    Set WshShell = CreateObject("WScript.Shell")
    Set WshSysEnv = WshShell.Environment("PROCESS")
    Set objNet = CreateObject("Wscript.Network")
    strUser = objNet.UserName

    'SAM2ADInfo liest den vollständigen Namen incl. dem Pfad im AD aus.
    strVollstaendig = SAM2ADInfo(strUser, "distinguishedName")

    'Die USERDNSDOMAIN die man auch über SET in der Commandline zu sehen bekommt.
    strUserDNSDomain = WshSysEnv("USERDNSDOMAIN")
    
    'Das vollständige Objekt holen, damit die Attribute ausgelesen werden können.
    Set obj = GetObject("LDAP://" & strUserDNSDomain & "/" & strVollstaendig)
    
    'Ab hier werden die Attribute den Variablen zugewiesen
    strName = obj.givenName & " " & obj.sn
    strOfficeName = obj.sn & ", " & obj.givenName
    strTelNo = obj.telephoneNumber
    strNebenstelle = Right(strTelNo, 3)
    strFaxNo = obj.facsimileTelephoneNumber
    strFaxKurz = Right(strFaxNo, 3)
    strmail = obj.mail
    strOrt = obj.l '(L = Location)
    strBeschreibung = obj.Description
    strAbteilung = obj.Department
    
    'Der eingetragene Vorgesetzte wird über LDAP ausgelesen.
    strChef = obj.Manager
    If strChef <> "" Then
        Set objChef = GetObject("LDAP://" & strUserDNSDomain & "/" & strChef)
        strChefName = objChef.givenName & " " & objChef.sn
    End If

Die Function SAM2ADInfo hab ich nicht mitgepostet, die findest Du bei Nils auf der HP. Du musst also nur noch die Werte aus den Variablen in Textdateien schreiben.

Die Funktion um die Werte in die Registry zu schreiben musst Du nicht unbedingt nehmen, Du kannst natürlich auch statt dessen die Werte in eine Textdatei schreiben lassen. Wie man eine Textdatei erstellt und eine Zeile einträgt weißt Du ja schon, den Link zu einem solchen Beispiel hatte ich dir gepostet.

Ich habe auch noch dieses Makro gefunden, dass aber auch nicht funktioniert:


Da hatte ich noch keine Zeit das zu testen.
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#12 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 25. Januar 2012 - 09:06

Hallo,

erstmal vielen Dank für die Antworten. Ich bin mittlerweile ein ganzes Stück weiter.

Ich habe jetzt ein VBSkript, mit dem Daten aus dem AD in das Postanschrift Feld von Word geschrieben werden. Außerdem wird im Benutzerordner in einem Verzeichnis eine Datei mit den Daten aus dem AD erstellt.

Im Grunde ist mein Anfangsproblem gelöst nur habe ich jetzt ein Problem mit dem VBSkript. Wenn er am Ende des Skriptes die Datei abspeichert, so speichert er sie nicht in einer Vorlagen Datei.

.doc und auch .docx funktionieren aber sobald ich es auf .dotx ändere sagt er immer die Datei wäre Fehlerhaft.

Frage ist also, wie kann ich das VBSkript dazu bringen eine Word Datei als Vorlage abzuspeichern?

Gruß
Praktik

#13 Sunny61

Sunny61

    Expert Member

  • 22.225 Beiträge

 

Geschrieben 25. Januar 2012 - 09:18

Im Grunde ist mein Anfangsproblem gelöst nur habe ich jetzt ein Problem mit dem VBSkript. Wenn er am Ende des Skriptes die Datei abspeichert, so speichert er sie nicht in einer Vorlagen Datei.

.doc und auch .docx funktionieren aber sobald ich es auf .dotx ändere sagt er immer die Datei wäre Fehlerhaft.


Zeig doch den Code, dann kann man dir evtl. helfen.

BTW: Zum bearbeiten von VB Scripten solltest Du entweder einen richtigen VB Script Editor verwenden, alternativ geht natürlich auch der VBA-Editor von Office.
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/

#14 Praktik

Praktik

    Newbie

  • 16 Beiträge

 

Geschrieben 25. Januar 2012 - 09:21

Hier ist der Code:

Set WshShell = WScript.CreateObject("Wscript.Shell")
AppData = WshShell.ExpandEnvironmentStrings("%AppData%")
Set objSysInfo = CreateObject("ADSystemInfo")

strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)

Set objWord = CreateObject("Word.Application")
objWord.UserName = objUser.givenName & " " & objUser.SN
objWord.UserInitials = Left(objUser.givenName, 1) & Left(objUser.SN, 1)
objWord.UserAddress = "Abteilung" & Chr(13) & objUser.department & Chr(13) & objUser.givenName & " " & objUser.SN & Chr(13) & _ 
objUser.telephoneNumber & Chr(13) & _ 
objUser.mail

Set objWord = CreateObject("Word.Application")
objWord.Visible = True

Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection

objSelection.Font.Name = "News Gothic"
objSelection.Font.Size = "7"
objSelection.TypeText "Abteilung" & Chr(13) & objUser.department & Chr(13) & objUser.givenName & " " & objUser.SN & Chr(13) & _
objUser.telephoneNumber & Chr(13) & _ 
objUser.mail
objSelection.TypeParagraph()

objDoc.SaveAs(AppData & "\Microsoft" & "\Document Building Blocks" & "\1031" & "\Benutzerdaten.dotx")

objWord.Quit

So wie er jetzt ist funktioniert er zwar, aber man kann die .dotx Datei nicht öffnen. Habe eben gerade etwas mit CompatibilityMode gefunden was man dahinter setzen kann, da bin ich gerade am ausprobieren.

Zum bearbeiten nutze ich derzeit Notepad++, das geht auch^^

-edit-
Ich sehe gerade CompatibilityMode wurde in Zusammenhang mit VBA nicht mit VBS erwähnt...

#15 Sunny61

Sunny61

    Expert Member

  • 22.225 Beiträge

 

Geschrieben 25. Januar 2012 - 09:35

Hmm, ich würde das andersrum machen. Schreib die benötigten Werte in die Registry. Sobald die Word Vorlage geöffnet wird, holst Du dir die Werte aus der Registry und schreibst sie ins Word Dokument. Geht IMHO einfacher.

Und zum testen kannst Du objWord.Visible = True auf objWord.Visible = False abändern. Ich kann den Code später auch noch testen.
Gruppenrichtlinien: http://www.gruppenrichtlinien.de/