Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Vbs - Attribute des Eingeloggten Users aus AD auslesen, laut vorlage in Outlook Sig übernehmen

Frage Entwicklung Batch & Shell

Mitglied: ViktorHim

ViktorHim (Level 1) - Jetzt verbinden

25.06.2013, aktualisiert 04.07.2013, 2382 Aufrufe, 7 Kommentare, 3 Danke

Hallo,
Das Script soll erkennen welcher User sich an dem PC einloggt und Automatisch aus der AD verschiedene Werte auslesen, diese (laut meiner vorlage aus einer txt rft htm) in eine Outlook-Signature abspeichern.


@SlainteMhath Du hast ja recht :D


Update 2: Soweit sind jetzt alle fehler Behoben und das Sript "funktioniert" soweit es soll. Durch Updates, unter anderem im "FileSystemObject = FSO", mussten mehrere sachen überarbeitet werden; die mir auch nicht bekannt waren & somit fehler verursacht haben. Das Script läuft jetzt soweit auf meinem Rechner und wird vorraussichtlich Morgen zum Test kommen.

Durch änderung der FSO, muss mit 1, 2 nach der variablen deklariert werden; wobei man
01.
 Const ForReading = 1, ForWriting = 2 
angeben muss, da ForReading Standartmässig 0 ist, dieses war mir aus meinem Studium auch nicht bekannt. Quelle: http://support.microsoft.com/kb/300982/de

Update 3: Das Script macht was es soll, funktioniert bei uns 1A! Wird jetzt uns einiges an Zeit ersparen, immer Namen position Gruppe usw in den Vorlagen zu bearbeiten.
Nochmals recht Herzlichen Dank!


Hier das Überarbeitete Script:
01.
option explicit 
02.
 
03.
'Laden der zu benötigten Variablen 
04.
dim WshShell 
05.
dim strSig, objDomain, strActiveUser, objObject, objUser, OU, strFileName, strUserName 
06.
dim strFiles(), strItem, strClnReplacement, strFile, strSigName 
07.
dim objFSO, objFile, objWord, objEmailOptions, objSignatureObject 
08.
redim strFiles(2) 
09.
 
10.
'Laden des Eingeloggten Users 
11.
set WshShell = WScript.CreateObject("WScript.Shell") 
12.
strUserName = WshShell.ExpandEnvironmentStrings("%USERNAME%") 
13.
'Echo wurde zu Testzwecken deklariert und kann auskommentiert werden 
14.
WScript.Echo strUserName 
15.
 
16.
'Definition der Vorlagendateien 
17.
strFiles(0) = "C:\Users\ViktorHim\Desktop\Sig\Signature_test.htm" 
18.
strFiles(1) = "C:\Users\ViktorHim\Desktop\Sig\Signature_test.rtf" 
19.
strFiles(2) = "C:\Users\ViktorHim\Desktop\Sig\Signature_test.txt" 
20.
 
21.
 
22.
'Platzhalter in allen Dateien gegen personalisierte Werte austauschen 
23.
for each strFile in strFiles 
24.
	Const ForReading = 1 
25.
    set objFSO = CreateObject("Scripting.FileSystemObject") 
26.
    set objFile = objFSO.OpenTextFile(strFile, 1) 
27.
 
28.
    'Einlesen des Dateiinhaltes in die Variable strSig 
29.
    strSig = objFile.ReadAll 
30.
    objFile.Close 
31.
	 
32.
    for each strItem in ReturnArrayOfPlaceholders(strFile) 
33.
        '"Reinigung" des Placeholders (entfernen von den Steuerzeichen @_ und _@) um den AD-Feldnamen 
34.
        'in Reinform zu gewinnnen. 
35.
        'Bsp.: aus @_givenName_@ wird givenName 
36.
        strClnReplacement=Replace(strItem,"@_","") 
37.
        strClnReplacement=Replace(strClnReplacement,"_@","") 
38.
        if len(strClnReplacement) > 0 then 
39.
          'Ersetzen des Placeholders durch die personalisierten AD Daten 
40.
          'Bsp.: @_givenName_@ wird zu Mustermann 
41.
          strSig = Replace(strSig, strItem, GetADData(strClnReplacement, strUserName)) 
42.
        end if 
43.
    Next 
44.
	 
45.
     
46.
	'Den Namen der Signatur merken 
47.
    strSigName = objFSO.GetBaseName(strFile) 
48.
	 
49.
    'Wegschreiben der personalisierten Signatur in eine Datei 
50.
    set objFSO = CreateObject("Scripting.FileSystemObject") 
51.
    strFileName = WshSysEnv & "MicrosoftSignatures" & strFile 
52.
	strFileName = "C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Signatures" & strUserName.Username & "\Anwendungsdaten\Microsoft\Signatures\" & strFile 
53.
    set objFile = objFSO.CreateTextFile(strFileName, true) 
54.
    objFile.Write strSig     
55.
    objFile.Close 
56.
next 
57.
 
58.
 
59.
'neue Signatur in Outlook aktivieren 
60.
Set objWord = CreateObject("Word.Application") 
61.
Set objEmailOptions = objWord.EmailOptions 
62.
Set objSignatureObject = objEmailOptions.EmailSignature 
63.
objSignatureObject.NewMessageSignature = strSigName 
64.
objSignatureObject.ReplyMessageSignature = strSigName 
65.
objWord.Quit 
66.
 
67.
 
68.
'------------------------Funktionen--------------------------------- 
69.
 
70.
 
71.
'Diese Funktion gibt alle Placeholder einer übergebenen Datei in einem Array zurück 
72.
 
73.
Function ReturnArrayOfPlaceholders(strFile) 
74.
    Dim strReplacements(),i,strSigLine, intPos, intPosSpace,strItem, objFSO_Func, objFile_Func 
75.
    ReDim strReplacements(50) 
76.
    i = 0 
77.
    Set objFSO_Func = CreateObject("Scripting.FileSystemObject") 
78.
    Set objFile_Func = objFSO.OpenTextFile(strFile) 
79.
    Do Until objFile_Func.AtEndOfStream 
80.
      strSigLine = objFile_Func.ReadLine 
81.
      intPos = 0 
82.
      intPos = InStr(strSigLine, "@_") 
83.
      Do While intPos > 0 
84.
          intPosSpace = InStr(intPos, strSigLine, "_@") 
85.
          strItem = Mid(strSigLine, intPos, intPosSpace - intPos + 2) 
86.
          strReplacements(i) = strItem 
87.
          intPos = InStr(intPos + 1, strSigLine, "@_") 
88.
          i = i + 1 
89.
      Loop 
90.
    Loop 
91.
    objFile_Func.Close 
92.
    ReDim Preserve strReplacements(i) 
93.
    ReturnArrayOfPlaceholders = strReplacements 
94.
End Function 
95.
 
96.
 
97.
'Diese Funktion gibt für den übergebenen sAMAccountName den Inhalt des 
98.
'übergebenen AD-Feldes (strADFieldName) zurück. 
99.
'strADFieldname kann jedes Feld des Userobjektes im AD sein.  
100.
 
101.
Function GetADData(strADFieldName, strUserName) 
102.
    Dim objConnection, objCommand, objRecordSet 
103.
    'Wie viele Ebenen im AD gesucht werden soll 
104.
    Const ADS_SCOPE_SUBTREE = 2 
105.
     
106.
	'Verbindung zu AD herstellen 
107.
	Set objConnection = CreateObject("ADODB.Connection") 
108.
	Set objCommand = CreateObject("ADODB.Command") 
109.
	objConnection.Open "Provider=ADsDSOObject;" 
110.
	objCommand.ActiveConnection = objConnection 
111.
	objCommand.CommandText = "SELECT " & strADFieldName & " FROM " & _ 
112.
	"'LDAP://OU=Irrenhau,OU=da,DC=was,DC=com' " & _ 
113.
	"WHERE samAccountName = '" & strUserName & "'" 
114.
	objCommand.Properties("SearchScope") = ADS_SCOPE_SUBTREE 
115.
	Set objRecordSet = objCommand.Execute 
116.
	GetADData = objRecordSet.Fields(strADFieldName) 
117.
	End Function
Danke nochmals an @Biber & @SlainteMhath für die Hilfestellung!

@Biber Jetzt habe ich erst deinen Post verstanden :D ; ist auch schon recht spät, Gute Nacht.


So long

Viktor
Mitglied: SlainteMhath
25.06.2013 um 15:52 Uhr
Moin,

bitte formatieren den code mit den entsprechenden Tags, so ist das kaum lesbar im Browser. Und dann verrat uns doch WAS für eine Fehlkermeldung kommt und v.A.WO (=in welcher Zeile)

lg,
Slainte
Bitte warten ..
Mitglied: ViktorHim
25.06.2013 um 18:23 Uhr
Hallo,
habs nochmal überarbeitet. Fehlermeldung stand schon da, aber bei dem durcheinander bestimmt übersprungen ;)

Lg
Viktor
Bitte warten ..
Mitglied: Biber
25.06.2013 um 21:43 Uhr
Moin VictorHim,

willkommen im Forum.

Das Naheliegendste bei dieser Fehlermeldung wäre doch mal eine Debug-Ausgabe des dort ankommendenden SQL-Statements.

Also so etwas
01.
 
02.
Function GetADData(strADFieldName, strActiveUser) 
03.
    Dim objConnection, objCommand, objRecordSet 
04.
 
05.
    Const ADS_SCOPE_SUBTREE = 2 
06.
 
07.
    Set objConnection = CreateObject("ADODB.Connection") 
08.
    Set objCommand = CreateObject("ADODB.Command") 
09.
    objConnection.Provider = ("ADsDSOObject") 
10.
    objConnection.Open "Active Directory Provider" 
11.
    objCommand.ActiveConnection = objConnection 
12.
    objCommand.CommandText = "SELECT " & strADFieldName & " FROM " & _ 
13.
        "'LDAP://dc=contoso,dc=msft' " & _ 
14.
            "WHERE samAccountName = '" & strActiveUser & "'" 
15.
    objCommand.Properties("SearchScope") = ADS_SCOPE_SUBTREE 
16.
' Anfang Ausgabe zur Fehlersuche: 
17.
Wscript.echo "[" &  objCommand.CommandText &"]" 
18.
' Ende Ausgabe zur Fehlersuche      
19.
 
20.
Set objRecordSet = objCommand.Execute 
21.
' Und hier sollte wenigstens abgefangen werden, ob zufällig 
22.
' ein leeres ResultSet zurückkam - das ist einfach das Mindestmass an Stil. 
23.
 
24.
If not  objRecordSet.Eof 
25.
    GetADData = objRecordSet.Fields(strADFieldName) 
26.
Else 
27.
 ' Fehlerbehandlung, z.B eine Zeile Logfile für den Admin 
28.
End if
Was wird denn für ein Statement erzeugt?

Gibt ja nur die Möglcihkeiten, dass "demUserSeinName" oder "demUserSeinFeld" nicht gefunden werden.

Grüße
Biber
Bitte warten ..
Mitglied: SlainteMhath
26.06.2013 um 08:45 Uhr
@ViktorHim
Danke fürs formatieren

Gibt ja nur die Möglcihkeiten, dass "demUserSeinName" oder "demUserSeinFeld" nicht gefunden werden.
Dem ist nichts mehr hinzuzufügen
Bitte warten ..
Mitglied: ViktorHim
26.06.2013 um 20:18 Uhr
Danke & werde ich Morgen mal ausprobieren. Heute leider keine zeit gehabt daran zu arbeiten.

@SlainteMhath Bitte ;D
Bitte warten ..
Mitglied: Biber
03.07.2013 um 18:23 Uhr
Moin ViktorHim,

Zitat von ViktorHim: am 26.06.2013 um 20:18 Uhr
Danke & werde ich Morgen mal ausprobieren. Heute leider keine zeit gehabt daran zu arbeiten.
Lass mich raten - und dann ist irgendetwas Ungeplantes passiert und seitdem hältst du dich im Terminal-Bereich des BER-Flughafens auf und schreibst jetzt mit dem Word-Serienbrief-Feature Asylanträge..


Anders gefragt: ist noch ein Rest Leben in diesem Beitrag oder kann ich den kompostieren?

Grüße
Biber
Bitte warten ..
Mitglied: ViktorHim
03.07.2013, aktualisiert um 22:58 Uhr
Abend @Biber

Lass dieses noch bitte stehen, werde mich Morgen melden. Hatten einen kompletten Serverausfall für 3 Tage um das sich unser Team kümmern musste.


Update wurde gepotet

Mfg
Viktor
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Outlook & Mail
gelöst Outlook fragt Passwort ab, obwohl AD anmeldung erfolgreich (6)

Frage von LordNicon79 zum Thema Outlook & Mail ...

Windows Userverwaltung
PS Skript AD Objekte auslesen (1)

Frage von m.reeger zum Thema Windows Userverwaltung ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...