volunteer1985
Goto Top

An domäne angemeldete User

Hallo,
hab die etlichen Beiträge in dem Forum zu diesem Thema gelesen aber, so das 100 %ige war für mich nicht dabei...
Mache gerad ein Praktikum, meine Aufgabe ist es alle an der Domäne !!angemeldeten!! User + LogOn + LogOff Zeiten aus dem Active Directory auszulesen und in eine Datei zu schreiben. Da ich gerade erst frisch aus der schule bin fehlts mir noch an fachwissen...
Ich würde das gern mit einer kleinen VBS File über ldap lösen. Wenn jem. diesbezüglich schon ein ähnl. script hat oder nen guten link...*G* lieber das script da ich ehrlich gesagt keine ahnung habe....face-smile
MFG

Content-Key: 31327

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

Printed on: April 24, 2024 at 19:04 o'clock

Member: Dani
Dani Apr 27, 2006 at 17:28:11 (UTC)
Goto Top
Hi,
mit diesem VBScript kannst du mal auslesen, wann er sich das letzte mal angemeldet hat. Das Ergebnis wird in einer Exceltabelle ausgegeben!
On Error Resume Next

Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objExcel = CreateObject("Excel.Application")  

objExcel.Visible = True
objExcel.Workbooks.Add

'Set objWorkbook = objExcel.Workbooks.Add  
Set objWorksheet = objWorkbook.Worksheets(3)
Set colSheets = objWorkbook.Sheets

'#######################################  
' Auslesen der Textdatei - Darin stehen die OU Gruppen  
'#######################################  
Dim arrFileLines()
i = 0
Set objFile = objFSO.OpenTextFile("ou.txt", 1)  

Do Until objFile.AtEndOfStream
     Redim Preserve arrFileLines(i)
     arrFileLines(i) = objFile.ReadLine
i = i + 1
Loop
objFile.Close

'#######################################  
'#######################################  
'colSheets.add ,objWorksheet,b  
x = 2
oucount = 1
mustchangepw = 1
ischangedpw = 1

For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1
	
	'x = 3  

	Set objWorksheet = objWorkbook.Worksheets(1)
	objWorksheet.Activate

	'#############################################################  
	'Erstelllt die Überschriften in der Exceldatei  
	'#############################################################  
	objExcel.ActiveSheet.Cells(1, 1).Value = "Name"  
	objExcel.ActiveSheet.Cells(1, 2).Value = "Benutzername"  
	objExcel.ActiveSheet.Cells(1, 3).Value = "Organisationeinheiten"  
	objExcel.ActiveSheet.Cells(1, 4).Value = "Letzter Login"  
	
	'#############################################################  
	'Passt die Spaltenbreite der jeweiligen Überschrift an  
	'#############################################################  
	objExcel.ActiveSheet.Cells(1, 1).ColumnWidth = 16
	objExcel.ActiveSheet.Cells(1, 2).ColumnWidth = 20
	objExcel.ActiveSheet.Cells(1, 3).ColumnWidth = 30
	objExcel.ActiveSheet.Cells(1, 4).ColumnWidth = 25
	
	'#############################################################  
	'Dekl. von Konstanten  
	'#############################################################  
	Const ADS_UF_ACCOUNTDISABLE = 2
	Const ADS_UF_PASSWORD_EXPIRED = &h800000
	Const ADS_ACETYPE_ACCESS_DENIED_OBJECT = &H6
	Const CHANGE_PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-00aa0040529b}"  


	Set objHash = CreateObject("Scripting.Dictionary")  
	objHash.Add "ADS_UF_DONT_EXPIRE_PASSWD", &h10000  

	Set objConnection = CreateObject("ADODB.Connection")  
	objConnection.Open "Provider=ADsDSOObject;"  
	Set objCommand = CreateObject("ADODB.Command")  
	objCommand.ActiveConnection = objConnection

	objCommand.Properties("Page Size") = 1000  
	objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE   
	

objCommand.CommandText = _
    "<GC://" & arrFileLines(l) & ">;(objectCategory=User)" & _  
        ";userAccountControl,distinguishedName,cn;subtree"  

Set objRecordSet = objCommand.Execute
Do Until objRecordset.EOF
 intUserAccountControl = objRecordset.Fields("userAccountControl")  
 If NOT intUserAccountControl AND ADS_UF_ACCOUNTDISABLE Then
    For Each Key In objHash.Keys 		
    
	'#############################################################  
	'Auslesen der Infos und erzeugen des Excelinhalts  
	'#############################################################  
    set objuser = getObject ("LDAP://" & objRecordset.Fields("distinguishedName").value)  
    lastlogon = objuser.LastLogin
	dtmValue = objuser.PasswordLastChanged
    dnName = objRecordset.Fields("distinguishedName").value  
               
    dnnamesumcount = Len(dnname)
    dnnamecount = InStr(1,dnname,"OU")  
    cut = dnnamesumcount - dnnamecount 
    dncut = Right(dnname, cut)
		
	TF.WriteLine("WYDLER\" + objuser.sAMAccountName)  
	objExcel.ActiveSheet.Cells(x, 1).Value = objuser.cn 'cnName  
	objExcel.ActiveSheet.Cells(x, 2).Value = objuser.sAMAccountName 
   	
   	objExcel.ActiveSheet.Cells(x, 3).Value = dncut 'arrFileLines(l)  
    objExcel.ActiveSheet.Cells(x, 4).Value = lastlogon
		
	x = x + 1        	
	 
	Next
    End If
   	objRecordset.MoveNext
	 
	Loop

objConnection.Close
oucount = oucount + 1
Next

Set objRange = objWorksheet.UsedRange

objRange.EntireColumn.Autofit()
objExcel.Close
wscript.echo "Fertig!"  
Dann brauchst du noch eine txt - Datei im gleichen Ordner wie was vbs. Diese muss so aussehen:
ou=ORGEINHEIT,dc=DOMÄNE
Damit gibst du an, welche Organisationseinheit gescannt werden kann.


Gruß
Dani
Member: volunteer1985
volunteer1985 Apr 28, 2006 at 06:53:20 (UTC)
Goto Top
Hey Dani,
erstmal ein riesen Dankeschön...
werd das Programm so ummodeln das es die daten in eine csv datei schreibt....
Leider stimmt das bei mir mit der ou und der dc nicht... das problem hatte ich auch bei meinem Versuch das AD auszulesen... entweder der Admin hat mir die falsche ou und dc gegeben oder irgendwas anderes stimmt nicht.... (deine excel datei enthält bei mir auch nur die Überschriften)
wenn ich es über LDAP:rootDSE mache geht es aber dann hab ich alle und ich brauche nur eine ou....
Ahja eine Frage noch. In deiner ou.txt stehen
ou=ORGEINHEIT,dc=DOMÄNE ich habe scripte gesehen da steht:
LDAP:
ou=ORGEINHEIT,dc=DOMÄNE,dc=de
warum brauch ich den letzten Parameter nicht??

MFG
Hagen
Member: Dani
Dani Apr 28, 2006 at 10:45:47 (UTC)
Goto Top
Hi,
wenn du mir sagst, wenn in welcher Domäne du welche OU Einheit auslesen möchtest dann erstell ich dir mal n Beispiel draus. Das mit der Textdatei hat den Sinn, wenn du mehere Domänen bzw. OU-Einheiten durchsuchen möchtest.

Es kann ja auch nix kommen, da er deine Domäne oder OU vielleicht nicht findet!!


Gruß
Dani
Member: volunteer1985
volunteer1985 May 02, 2006 at 06:19:13 (UTC)
Goto Top
Ähm vielen dank bin auf die PHP Variante umgeschwenkt die ist für einen Rookie glaub ich eher verständlich dafür hab ich mir mal das script aus eurem Forum geborgt:
mittels PHP das Windows Active Directory auslesen
aber irgendwie läufts schon besser hab ne connection(zum ist $binding =true).
Nur die Ausgabe ist eher bescheiden.
Nochmal der Code:
$basedn = "ou=benutzer,ou=trx,dc=abcde-ag,dc=de";
$server = "servername.trx.abcde-ag.de";
$username = "";
$password = "";
$connectid = ldap_connect($server);

echo "
connect id:".$connectid."
";
$binding = ldap_bind($connectid,$username,$password) or die("Fehler");

if ($binding==1)
{
echo "Verbindung erfolgreich hergestellt.
";
}
$filter="id=*";//<<<<<<meine Frage
$search = ldap_search($connectid,$basedn,$filter);
echo "Ergebnis der suche:".$search."
";
$result = ldap_get_entries($connectid,$search);
print_r($result);

die Ausgabe ist:
connect id:Resource id #1
Verbindung erfolgreich hergestellt.
Ergebnis der suche:Resource id #2
Array ( [count] => 0 )

Ich bin mir ziemlich sicher der fehler liegt in der zeile $basedn... da der server ja erkannt und mit ihm auch verbunden wird muss ich wohl irgenwas bei der ou oder dc falsch haben.
In unserm AD gibt einen Ordner(ou) benutzer darunter einen ordner trx(ou) sonst sieht die konstellation aus wie oben...
hat jm. ne idee woran es liegen könnte???

SR das ich so nerve.
MFG