technox
Goto Top

Suche VBS erweiterung für das Auslesen von AD Werten nach Office

Wie in diesem Forum:
https://www.administrator.de/index.php?content=61291#245072
Soweit so gut: klappt - ich brauche aber noch andere Werte...

Kann mir jemand bitte sagen wie die Erweiterung lautet? Bin kein Programmierer..

Ich brauche für folgende AD Einträge entsprechend Felder in Word zum Einfügen:

- Büro
- E-Mail
- Postfach
- Fax
- Rufnummer

Wie lautet hier der code? Unten der funktionierende Teil...
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 = objUser.sAMAccountName
objWord.UserAddress = objUser.Company & Chr(13) & _
objUser.streetAddress & Chr(13) & _
objUser.postalCode & " " & objUser.l & Chr(13) & _
objUser.co

objWord.Quit

Content-ID: 164080

Url: https://administrator.de/contentid/164080

Ausgedruckt am: 25.11.2024 um 16:11 Uhr

TechnoX
TechnoX 06.04.2011 um 13:25:24 Uhr
Goto Top
Unter:

http://www.microsoft.com/germany/technet/datenbank/articles/600810.mspx

findet sich ein Informativer Artikel der einwenig licht ins Dunkel bringt..
bastla
bastla 06.04.2011 um 13:45:44 Uhr
Goto Top
... und @Yusuf-Dikmenoglu hilft sicher auch ...

Grüße
bastla
TechnoX
TechnoX 06.04.2011 um 14:14:09 Uhr
Goto Top
Also schonmal ein Dickes danke damit hab ich 75%...

er bringt mir ne Runtime Fehlermeldung.. unterstützt das nicht blablabla.. kennst den Quack ja.

objWord.??????? = objUser.telephoneNumber
Du verstehst das Problem?

Wenn ich es wie folgt eingebe
objWord.UsertelephoneNumber = objUser.telephoneNumber

macht er folgendes - er arbeitet es ab - sucht das Objekt - lies aus schreibt ein & geht ins nächste bis zu
dieser Zeile. Da In Word scheinbar kein Objekt mit der bezeichnung "telephoneNumber" existiert wo er die daten
einfüllen kann - bricht er ab.
Wie komme ich da heran? Wo hinterlegt man den ausgelesenen Wert?

Dachte das er zuerst mit dem Befehl "objWord.UsertelephoneNumber" das Objekt automatisch erstellt - das war Fehldenken..
TechnoX
TechnoX 06.04.2011 um 16:30:33 Uhr
Goto Top
Kann mir einer bitte mal helfen???

Ich würde gerne einfach auf die selbe Weise wie für zb. "Useradress" ein Feld haben das EMAIL heißt.
Ich will das der User sich anmeldet - das Script durchläuft - die Werte befüllt. So das eine Dot mit entsprechenden
Feldern sich automatisch je Niederlassung und User ausfüllt.

Das kann doch keine so besondere Anforderung sein....

Es klappt ja auch bei einigen Werten - aber wie scripte ich das für diese werte?

- Büro
- E-Mail
- Postfach
- Fax
- Rufnummer

Es gibt keine Vorlage & weder meine 3 Bücher mit knapp 2000 Seiten noch die Stunden des Googlens haben mich wirklich näher gebracht.
Das kann doch nicht sein das noch keiner eine Lösung dafür gefunden und geposted hat...
Logan000
Logan000 07.04.2011 um 12:04:40 Uhr
Goto Top
Moin Moin

Wie komme ich da heran? Wo hinterlegt man den ausgelesenen Wert?
Der Punkt ist doch das es die Eigenschaft "UsertelephoneNumber" im Word.Application nicht gibt.

Das kann doch keine so besondere Anforderung sein....
Stimmt, aber du gehst dabei etwas umständlich vor.
Anstatt diese Infos in eine Vorlage oder ein Dokument zu blasen, scheinst du zu versuchen Word zu erweitern und zu hoffen das diese infos wie duch Geisterhand in allen deinen Dokumenten auftauchen.

Starte deinen VBA Editor und schau dort in der Hilfe erstmal nach, was geht und was nicht.
Da kann man das auch gleich schön ausprobieren.

Gruß L.
TechnoX
TechnoX 07.04.2011 um 13:18:35 Uhr
Goto Top
Ich habe weder Kenntnisse von VBA noch habe ich einen Editor. Is das erstemal das diese Anforderung für Office umgesetzt werden soll.
Hab mir teilweise nun so beholfen, das die Werte Mail, Telefon & Fax in das Feld Useradress übertragen werden.
Somit muss schonmal das nicht für jedes Dokument extra getippt werden. Und die Urspünglichen Daten bleiben im Richtigen Feld unangetastet.

Trotzdem - es gibt Felder zur Auswahl die leer stehen & die ich missbrauchen kann. Felder auf die keiner in absehbarer Zeit zu greift - nämlich die Dokument Eigenschaften. Wie Anmerkungen oder Benutzer etz. Nur wie kann ich diese befüllen?

objWord.UserAddress
objWord.UserInitials
objWord.UserName

..sind klar. aber es handelt sich scheinbar nicht um ein ObjWord. sondern um etwas anderes. Nur wie heist das???
TechnoX
TechnoX 07.04.2011 um 13:23:00 Uhr
Goto Top
Ach ja - eine der Fehlermeldungen tauchte auf weil das übergabe Feld keine Daten enthielt. Das führte zu einem Übergabe problem. .....gut zu wissen...
bastla
bastla 07.04.2011 um 15:53:51 Uhr
Goto Top
Hallo TechnoX!
Ich habe weder Kenntnisse von VBA noch habe ich einen Editor.
Ersteres kannst Du besser beurteilen, letzteres lässt sich mit einem einfachen Alt + F11 (in Word) falsifizieren ...
Im VBA-Editor kannst Du nach einem Doppelklick auf "ThisDocument" (im "Projekt-Explorer" links) folgenden Code in das Codefenster einfügen und ausführen:
Sub ShowProperties()
On Error Resume Next
For Each Property In ActiveDocument.BuiltInDocumentProperties
    Output = Output & vbCrLf & Property.Name
    Output = Output & vbTab & Property.Value
Next
MsgBox Output
End Sub
Damit erhältst Du eine Übersicht über die standardmäßig ("BuiltIn") vorhandenen Eigenschaften und, sofern vorhanden, deren aktuellen Wert.

Mehr dazu zB hier ...

Grüße
bastla
TechnoX
TechnoX 08.04.2011 um 13:41:02 Uhr
Goto Top
Infos:
Es gibt 3 Speicher in die wir Daten auffüllen können:

1) UserName
2) Initials
3) UserAdress

Diese lassen sich per VBS Script befüllen.
Das Script beginnt hiermit:

strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP:" & strUser)
Set objWord = CreateObject("Word.Application")

Was das bedeutet kann ich so konkret nicht sagen - ich vermute das hier Auslese Pfade und aktionen definiert werden.

objWord.UserName = objUser.givenName & " " & objUser.SN
objWord.UserInitials = objUser.sAMAccountName
objWord.UserAddress = ........


über objWord. wird der Speicherplatz in Word angesteuert. dh diese 3 Speicherplätze:


objWord.UserName zu finden unter Word2007 unter Wordoptionen Benutzername
objWord.UserInitials zu finden unter Word2007 unter Wordoptionen Initialien
objWord.UserAddress zu finden unter Word2007 unter Wordoptionen[erweitert\Allgemein] Postanschrift

Diese exisieren als reale Felder & können Problemlos auch von Hand eingefügt werden.

objUser. = definiert das zuvor mit dem "Set objUser = GetObject("LDAP:
" & strUser)" definierte Suchziel.
givenName = ist der LDAP Name des Feldes welches den Wert beinhaltet. In dem Fall den Profilname.
& " " = fügt eine Leerstelle ein oder einen Text je nach dem.
& = sehr wichtig für Werte Verknüpfungen.
& Chr(13) & _ = bewirkt einen Zeilensprung/nächste Zeile. Dient zur Formatierung.


Die Werte sind schon mit der entsprechenden & Anweisung angeben.

Folgende zeile:

objWord.UserName = objUser.givenName & " " & objUser.SN

Liest sich so:
Schaue unter dem UserProfil in der AD und füge diese Werte ein = Name des User und eine Leerstelle und Nachname des User

Nehmen wir uns jetzt den Restlichen Code vor, das is ein bissle komplizierer.

objWord.UserAddress = "Ihr/e Ansprechpartner/in:" & Chr(13) & _
objUser.givenName & " " & objUser.SN & Chr(13) & _
"Tel.: " & objUser.telephoneNumber & Chr(13) & _
"Fax "& objUser.facsimileTelephoneNumber & Chr(13) & _
objUser.Mail


Der Reservierte Speicherbereich objWord.UserAddress ist in diesem Beispiel noch mit zusätzlichen Informationen ergänzt worden.
Der übergebene Text der sich darin wieder findet sieht so aus:

Ihr/e Ansprechpartner/in:
Anreas Mustermann
Tel.: +49(123)1234-123
Fax +49(123)1234-123
a.mustermann@Mustermann.de

Gefüllt wird es über die Werte in der Aktiv Direktory. Ich will noch etwas auf die "objuser." eingehen.
Wir kennen das ObjWord.UserAdress und haben nun das Objuser.xxxxxx.
Beispiele für wären:

Objuser.sn
Objuser.telephoneNumber
objUser.facsimileTelephoneNumber
objUser.givenName
usw.

Die Bezeichnungen der Ldap-Ziele sind hier wunderbar nieder geschrieben:
http://blog.dikmenoglu.de/Die+Active+DirectoryAttribute+Hinter+Den+Feld ...

Mögliche Fehler

1) Der erste Fehler den ich gemacht habe war zu hoffen das jemand hierauf so nett ist und eine Effektive Hilfe bietet.
Das Problem - selbst Microsoft, die diese Methode durchaus kennen, geben nur spärliche Informationen darüber Preis.
Es geht so Weit das sie sogar eine typische "für Fehler & Schäden übernehmen wir keine Haftung" Meldung gleich mit geben.

2) Kompetente Hilfe zu erwarten, die einen in die Lage versetzt sich selbstständig weiter zu hangeln.
Insb. wenn man in Foren dies bezüglich als absoluter Neuling auf dem Gebiet nichts über VBS Programmierung
und LDAP Abfragen via VBS ist.... scheint plötzlich endloses Schweigen im Walde zu herrschen.

3) Scripting & Syntax Fehler aufgrund von nicht vorhandenen VBS Kenntnissen.

4) Übernahme eines Textes dessen zusammensetzung man nicht wirklich kennt. Kann zu falschen Annahmen führen.
Darum auch dieses kleine Tutorial.

5) Eine Zeile darf nicht mit einem & beginnen.

6) Office hat dem "objWord.UserAddress" nur einen begrenzten Speicherplatz gewährt. Dh. ich konnte nicht die
Vollständige Adresse sammt Telefon, Fax, Email, User mit einem Zusatztext und Abschnitt einfügen:

Name der Firma / Niederlassung GmbH etz.
Strasse.Nr
Postleitzahl Ort

Ihr/e Ansprechpartner/in:
Anreas Mustermann
Tel.: +49(123)1234-123
Fax +49(123)1234-123
a.mustermann@Mustermann.de

Diese Formatierung wäre zwar möglich - wird aber leider wegen der Begrenzung bei "Fax +" abgeschnitten. Möglich
wäre:

Name der Firma / Niederlassung GmbH etz.

Ihr/e Ansprechpartner/in:
Anreas Mustermann
Tel.: +49(123)1234-123
Fax +49(123)1234-123
a.mustermann@Mustermann.de


Hier der Quelltext des VBS-scripts zu dieser oben genannten Darstellung:


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 = objUser.sAMAccountName

objWord.UserAddress = objUser.streetAddress & Chr(13) & _
Chr(13) & _
"Ihr/e Ansprechpartner/in:" & Chr(13) & _
objUser.givenName & " " & objUser.SN & Chr(13) & _
"Tel.: " & objUser.telephoneNumber & Chr(13) & _
"Fax "& objUser.facsimileTelephoneNumber & Chr(13) & _
objUser.Mail

objWord.Quit


Wer genau hinsieht:

objWord.UserAddress = objUser.streetAddress & Chr(13) & _
Chr(13) & _

..erkennt das hier der Bereich des Profils abgefragt wird in dem die Straßen Adressdaten eingegeben werden können.
Wer also die gesammte Tipperei etwas modifizieren will ohne sich auf verschiedene Felder zu beziehen. der kann auch
in diesem Feld in dem Userprofil zb. folgendes eintragen:


Name der Firma / Niederlassung GmbH etz.

Ihr/e Ansprechpartner/in:
Anreas Mustermann
Tel.: +49(123)1234-123
Fax +49(123)1234-123
a.mustermann@Mustermann.de


Es würde dann aber so aus sehen:


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 = objUser.sAMAccountName

objWord.UserAddress = objUser.streetAddress

objWord.Quit


Dieser Weg hat aber den Nachteil das man sich nicht auf die eh vorhandenen Werte bezieht. Und man das Feld der "Strasse/Adresse"
in dem AD Benutzerprofil mit Daten belegt die u.U von dem eigentlichen Sinn vollkommen abweichen. Schließlich könnte man auch
"Willst du mich Heiraten" oder irgend einen anderen Text hier ablegen. Solange es nicht zu lang ist und die Speicherbegrenzung
des "objWord.UserAddress" erreicht.

Leider habe ich keinen Weg gefunden noch andere Speicher zu befüllen. Sprich - theoretisch gibt es in den Dokumenteigenschaften
Felder für "Author" etz. die man bestimmt ähnlich befüllen kann. Ich vermute aber das dies per Makro passieren muss.
Das man das Makro ausführt - dies die Abfrage durchführt - und ins Dokument einfügt. So könnte man über ein Makro automatisch
die Dokumenten Eigentschaften befüllen (Firma/Niederlassung/Author). Das aber ist wirklich nur eine Vermutung.
bastla
bastla 08.04.2011 um 14:56:09 Uhr
Goto Top
Hallo TechnoX!

strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
Set objWord = CreateObject("Word.Application")

Was das bedeutet kann ich so konkret nicht sagen - ich vermute das hier Auslese Pfade und aktionen definiert werden.
Die ersten beiden Zeilen dienen dazu, das Objekt des angemeldeten Benutzers zu erhalten, um die Werte seiner Eigenschaften dann aus dem AD (konkret: aus seinen Kontoinformationen, nicht aus dem Profil) auslesen zu können.

Mit der dritten Zeile wird ein "Word"-Objekt erzeugt (also per Script "Word" gestartet), um dort Werte für Eigenschaften setzen zu können.
Nur kurz zu
Leider habe ich keinen Weg gefunden noch andere Speicher zu befüllen. Sprich - theoretisch gibt es in den Dokumenteigenschaften
Felder für "Author" etz. die man bestimmt ähnlich befüllen kann. Ich vermute aber das dies per Makro passieren muss.
Hast du meinen letzten Kommentar gelesen, bist du dem Link darin gefolgt?

"Per Makro" arbeitest Du übrigens eigentlich schon die ganze Zeit - in Word sind "Makros" VBA-Scripts
Eine Zeilenschaltung wird in Windows üblicher Weise nicht per "Chr(13)", sondern mit der VB-Konstante "vbCrLf" eingefügt.

Grüße
bastla

P.S.: Mit ""-Formatierung sähe Deine Zusammenfassung noch besser aus ... face-wink
TechnoX
TechnoX 08.04.2011 um 15:09:11 Uhr
Goto Top
Nein - weil ich das noch nicht gesehen hatte. Hab den text zuvor als TXT getippt & recht schnell posten müssen da ich grad etwas unter Zeitdruck stehe.
bastla
bastla 08.04.2011 um 15:50:35 Uhr
Goto Top
Hallo TechnoX!

Nur keinen Stress ... face-smile

Grüße
TechnoX
TechnoX 08.04.2011 um 16:01:42 Uhr
Goto Top
Sag das mal den Leuden die hier anrufen... da darf ich Zaubern. Kann noch so sehr mit meinem Woodoo und Teufelsbeschwörungen arbeiten und kaum dreh ich mich um verlangt man von mir allwissend zu sein. Ach ja - Zerreißen sollte ich mich auch noch können & eine Urlaubsvertretung darf ich auch noch spielen.
Und weil alles noch nicht so super is - Spielt grade unsere neue Firewall auch noch mit rein, denn sie lässt alle 2 std das System abschmieren.. wesshalb dann natürlich das Telefon wieder schellt & der der es eingerichtet hat - hat, man ahnt es: Urlaub.
Und zu allem Überfluss darf ich noch dieses Office Zeug einrichten mich um den Antivierenschutz, die Einrichtung des Wsus, Einrichtung der Software paketverteilung & den alltäglichen Wehwehchen ala HILFE MEIN OOUTLOOK LEGT EIER kümmern...

Hab langsam die Schnauze echt voll. Bekomme für den Kack echt zuwenig Kohle..
Biber
Biber 08.04.2011 um 16:34:38 Uhr
Goto Top
[OT] @TechnoX

Ich sach ma' so...

Ist doch immer noch besser als richtig arbeiten zu müssen.

Ausserdem ist der Freitag doch schon in siebeneinhalb Stunden wieder rum, also fast geschafft.
Und am bald ist auch der 1. Mai -"Tag der Arbeit" und da haben wir alle schon wieder einen Extra-Tag frei.
Den ganzen Sonntag

In der Gewissheit, dich aufgemuntert zu haben.

Schönes Wochenende
Biber
[/OT]
TechnoX
TechnoX 08.04.2011 um 19:36:38 Uhr
Goto Top
Danke für den Versuch & ebenfalls ein schönes Wochenende