Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 2422 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 ..
Ähnliche Inhalte
Windows Server
gelöst Account-Sperrungen eines AD-Users auslesen (2)

Frage von MissJones zum Thema Windows Server ...

Windows Server
gelöst Powershell - AD-Export bestimmter OU bzw. User und Attributen auslesen (4)

Frage von oliver12 zum Thema Windows Server ...

XML
gelöst Vbs - simple XML Datei auslesen (4)

Frage von DeeJayBee zum Thema XML ...

Exchange Server
MS Exchange Attribute anzeigen (2)

Frage von Xaero1982 zum Thema Exchange Server ...

Neue Wissensbeiträge
Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(14)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

Information von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
Windows Server
Kennwort vergessen bei Hyper vserver 2012r (12)

Frage von jensgebken zum Thema Windows Server ...

Linux Desktop
Bildschirmauflösung unter Linux festlegen (12)

Frage von itebob zum Thema Linux Desktop ...

Windows Userverwaltung
gelöst Administrator hat alle Rechte verloren (10)

Frage von mrdead zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Gebäude mit WLAN ausstatten (9)

Frage von udobec zum Thema LAN, WAN, Wireless ...