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

Active Directory: Computerinformationen auslesen

Frage Microsoft Windows Userverwaltung

Mitglied: hansis1

hansis1 (Level 1) - Jetzt verbinden

03.01.2007, aktualisiert 27.06.2007, 16740 Aufrufe, 20 Kommentare

Hallo!

Ich möchte gerne alle Computerkonten im AD mittels VBS auslesen, um herauszufinden, ob es Computer gibt, an denen sich schon lange keiner mehr angemeldet hat.

Habe dazu schon einiges im Forum gefunden.
Leider habe ich bis jetzt erfolglos nach den Feldern lastLogon und LastLogoff gesucht.
Weiss jemand wie man diese anspricht?


Mein Skript:

Const ADS_SCOPE_SUBTREE = 2
Dim OutPutFile
Dim FileSystem

Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
Set OutPutFile = FileSystem.CreateTextFile("Computer.csv", True)
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = "Select name, lastLogonTimestamp, lastlogon from 'LDAP://DC=nv,DC=at' Where objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
outputfile.writeline "Computername;Objekt;Letzte Anmeldung"
Do Until objRecordSet.EOF
OutPutFile.WriteLine objRecordSet.Fields("name").Value & ";" & objRecordSet.Fields("lastLogonTimestamp").Value & ";" & objRecordSet.Fields("lastLogonTimestamp").Value
objRecordSet.MoveNext
Loop

OutPutFile.Close
Set FileSystem = Nothing
Set oContainer = Nothing
WScript.Echo "Finished: g:\Skripts\Computer.csv"
WScript.Quit(0)


Leider liest das Skript nur den Computernamen aus.

Danke
Hansi
Mitglied: Tundra
03.01.2007 um 08:31 Uhr
Hallo Hansi,

frage am Besten das Attribut 'whenChanged" oder 'modifyTimeStamp' ab.

01.
 
02.
Option Explicit 
03.
 
04.
const C_Log = "c:\Log\List_Letzte Kennwortänderung.log" 
05.
Const C_Computer = "LDAP://CN=forstpc-9,OU=EBZI32,DC=domaine,DC=de" 
06.
 
07.
 
08.
DIM O_File 
09.
DIM O_Log 
10.
 
11.
Set O_File = CreateObject("Scripting.FileSystemObject") 
12.
Set O_Log = O_File.OpenTextFile(C_Log,2,true) 
13.
 
14.
 
15.
call S_ReadAttribut() 
16.
 
17.
Sub S_ReadAttribut() 
18.
	Dim O_Attribut 
19.
	Set O_Attribut = GetObject(C_Computer) 
20.
 
21.
	O_Log.writeline "Letzte Kennwortänderung: " & O_Attribut.Get("whenChanged")	 
22.
end sub
Grüße
Guido
Bitte warten ..
Mitglied: hansis1
03.01.2007 um 09:06 Uhr
Hallo Guido!

Recht herzlichen Dank!

Sag mal, kennst Du einen Link, wo man sich all diese Feldnamen anschauen kann?

Danke
Hansi
Bitte warten ..
Mitglied: Tundra
03.01.2007 um 09:37 Uhr
Hallo Hansi,

eine Doku ist z. B. adsi25.chm.
Oft hilft es auch einen Blick in ADSIEdit (ich glaube in den Support-Tools) zu werfen.

Es ist aber nicht immer einfach alle Attribute auszulesen oder zu setzen, da es für manche Attribute unterschiedliche Verfahren gibt.

Grüße
Guido
Bitte warten ..
Mitglied: hansis1
10.01.2007 um 13:13 Uhr
Hallo!

Ich muss nochmals etwas nachfragen:

Ich möchte nun alle deaktivierten accounts auslesen. Weiß jemand wie ich das in das o.a. Skript einfügen kann?

Danke
Hansi
Bitte warten ..
Mitglied: Tundra
10.01.2007 um 14:45 Uhr
Hi Hansi,

meinst Du gesperrt oder deaktiviert?
Ich habe das Script mal etwas ausführlicher gemacht.

Ein Ordner Log muss natürlich existieren, damit das Log-File geschrieben werden kann.

Grüße
Guido

01.
'User-Account Informationen erfragen 
02.
'09.01.07/ge 
03.
 
04.
Option Explicit 
05.
 
06.
Const C_User = "LDAP://CN=Eink.Guido,OU=Firma,DC=meine,DC=domäne,DC=DE" 
07.
Const C_Log = "c:\Log\Read_User-Account.log" 
08.
 
09.
Dim O_User 
10.
Dim O_FSO 
11.
Dim O_Log 
12.
 
13.
Set O_User = GetObject(C_User) 
14.
Set O_FSO = CreateObject("Scripting.FileSystemObject") 
15.
Set O_Log = O_FSO.OpenTextFile(C_Log,2,True) 
16.
 
17.
O_Log.writeline C_User 
18.
O_Log.writeline "" 
19.
 
20.
'O_User.GetInfo 
21.
 
22.
O_Log.writeline "Profil Pfad: " & O_User.ProfilePath 
23.
O_Log.writeline "Script Path: " & O_User.ScriptPath 
24.
O_Log.writeline "Home Verzeichnis: " & O_User.HomeDirectory 
25.
O_Log.writeline "Home Laufwerk: " & O_User.HomeDrive 
26.
O_Log.writeline "CN: " & O_User.cn 
27.
O_Log.writeline "Firma: " & O_User.company 
28.
O_Log.writeline "Vorname: " & O_User.GivenName 
29.
O_Log.writeline "Nachname: " & O_User.sn 
30.
O_Log.writeline "Mail-Adresse: " & O_User.Mail 
31.
O_Log.writeline "AD-Name: " & O_User.Name 
32.
O_Log.writeline "sAMAccount: " & O_User.sAMAccountName 
33.
O_Log.writeline "User-Principal-Name: " & O_User.userPrincipalName 
34.
O_Log.writeline "Computer: " & O_User.userWorkstations 
35.
 
36.
O_Log.writeline "" 
37.
If O_User.IsAccountLocked = True Then 
38.
	O_Log.writeline "Account gesperrt: JA" 
39.
Else 
40.
	O_Log.writeline "Account gesperrt: Nein" 
41.
End If 
42.
 
43.
If O_User.userAccountControl And 2 Then 
44.
	O_Log.writeline "Account deaktiviert: JA" 
45.
Else 
46.
	O_Log.writeline "Account deaktiviert: Nein" 
47.
End If 
48.
 
Bitte warten ..
Mitglied: hansis1
10.01.2007 um 15:07 Uhr
Hi Hansi,

meinst Du gesperrt oder deaktiviert?
Ich habe das Script mal etwas
ausführlicher gemacht.

Ein Ordner Log muss natürlich
existieren, damit das Log-File geschrieben
werden kann.

Grüße
Guido

Hallo Guido
Ich möchte die deaktivierten Computerkonten auslesen.
Hier mein Code:
01.
    Const ADS_SCOPE_SUBTREE = 2 
02.
    Dim OutPutFile 
03.
    Dim FileSystem 
04.
 
05.
    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject") 
06.
    Set OutPutFile = FileSystem.CreateTextFile("Computer.csv", True)  
07.
    Set objConnection = CreateObject("ADODB.Connection") 
08.
    Set objCommand =   CreateObject("ADODB.Command") 
09.
    ObjConnection.Provider = "ADsDSOObject" 
10.
    objConnection.Open "Active Directory Provider" 
11.
	 
12.
    Set objCOmmand.ActiveConnection = objConnection 
13.
    objCommand.CommandText = "Select * from 'LDAP://DC=nv,DC=at' Where objectClass='computer'"   
14.
    objCommand.Properties("Page Size") = 1000 
15.
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE  
16.
    Set objRecordSet = objCommand.Execute 
17.
    objRecordSet.MoveFirst 
18.
    outputfile.writeline "Computername;Letzte Anmeldung" 
19.
    Do Until objRecordSet.EOF 
20.
        OutPutFile.WriteLine objRecordSet.Fields("isAccountLocked") & ";" & objRecordSet.Fields("name").Value & ";" & objRecordSet.Fields("lastLogonTimestamp").Value & ";" & objRecordSet.Fields("lastLogonTimestamp").Value & ";" & objRecordSet.Fields("whenChanged").Value & ";" & objRecordSet.Fields("modifyTimeStamp").Value 
21.
        objRecordSet.MoveNext 
22.
    Loop 
23.
 
24.
    OutPutFile.Close 
25.
    Set FileSystem = Nothing 
26.
    Set oContainer = Nothing 
27.
    WScript.Echo "Finished: g:\Skripts\Computer.csv" 
28.
    WScript.Quit(0)
Bitte warten ..
Mitglied: Tundra
10.01.2007 um 15:32 Uhr
Hi,

muss Du eine Domäne auslesen oder eine OU?
Du kannst ja eine Funktion bauen und ihr den LDAP-Pfad mit dem Computer übergeben.

Grüße
Guido
01.
 
02.
 
03.
Const C_Computer = "LDAP://CN=FORSTPC-9,OU=EBZI32,DC=FORST,DC=BWL,DC=DE" 
04.
Dim O_Computer 
05.
 
06.
Set O_Computer = GetObject(C_Computer) 
07.
 
08.
If O_Computer.userAccountControl And 2 Then 
09.
	wscript.echo "  Account deaktiviert: JA" 
10.
Else 
11.
	wscript.echo "  Account deaktiviert: Nein" 
12.
End If
Bitte warten ..
Mitglied: hansis1
10.01.2007 um 15:48 Uhr
Hallo!

Ich muss eine Domäne auslesen.
01.
objCommand.CommandText = "Select * from 'LDAP://DC=nv,DC=at' Where objectClass='computer'"  
Nur kann ich danach nicht auf das Feld "isAccountLocked" zugreifen.

lg
Hansi
Bitte warten ..
Mitglied: Tundra
10.01.2007 um 16:32 Uhr
Hi,

komischerweise hat es bei mir über die Funktion nicht geklappt, aber mit einer Routine.

Das Script geht durch die Domäne, jeder Rechner wird an die Routine übergeben und die prüft den Account.

Grüße
Guido

01.
const C_Log = "c:\Log\List_Computer-in-Domain.log" 
02.
const C_Domain = "DC=meine,DC=domäne,DC=DE" 
03.
 
04.
DIM O_File 
05.
DIM O_Log 
06.
 
07.
Set O_File = CreateObject("Scripting.FileSystemObject") 
08.
if not O_File.FolderExists("c:\Log") then 
09.
	O_File.CreateFolder "c:\Log" 
10.
end if 
11.
Set O_Log = O_File.OpenTextFile(C_Log,2,true) 
12.
 
13.
call S_SearchComputer 
14.
 
15.
'################################### 
16.
sub S_SearchComputer 
17.
	'on error resume next 
18.
	DIM O_Con 
19.
	DIM O_Com 
20.
	DIM O_Exec 
21.
	DIM L_Filter 
22.
	DIM L_Domain 
23.
	DIM L_CN 
24.
	DIM i 
25.
  i = 1 
26.
	L_Domain = "<LDAP://" & C_Domain & ">" 
27.
	L_Filter = "(&(objectCategory=Computer))" 
28.
	L_CN = "distinguishedName,CN" 
29.
 
30.
	SET O_Con = CreateObject("ADODB.Connection") 
31.
	O_Con.Provider = "ADsDSOObject" 
32.
	O_Con.Open "Active Directory Provider" 
33.
	Set O_Com = CreateObject("ADODB.Command") 
34.
	O_Com.ActiveConnection = O_Con 
35.
	O_Com.CommandText = L_Domain & ";" & L_Filter & ";" & L_CN & ";subtree" 
36.
	O_Com.Properties("Page Size") = 100 
37.
	O_Com.Properties("Sort On") = "Name" 
38.
	set O_Exec = O_Com.Execute 
39.
	if err.number <> 0 then 
40.
		'msgbox "Der OU-Name wurde falsch geschrieben oder" & vbcrlf & "der Pfad stimmt nicht!",vbokonly + vbexclamation,"Fehler" 
41.
		wscript.echo err.description 
42.
		exit sub 
43.
	end if 
44.
	O_Exec.MoveFirst 
45.
	 
46.
	Do until O_exec.eof 
47.
        'O_Log.writeline "   LDAP: " & O_Exec.fields(0) 
48.
        O_Log.writeline i & ") Name: " & O_Exec.fields(1) 
49.
        Call F_CheckAccount(O_Exec.fields(0)) 
50.
        i = i + 1 
51.
        O_EXEC.Movenext 
52.
	loop 
53.
	'on error goto 0 
54.
end sub 
55.
 
56.
 
57.
Sub F_CheckAccount(P_Pfad) 
58.
	Dim O_Computer 
59.
	Dim L_Pfad 
60.
	 
61.
	L_Pfad = "LDAP://" & P_Pfad 
62.
	Set O_Computer = GetObject(L_Pfad) 
63.
 
64.
	If O_Computer.userAccountControl And 2 Then 
65.
		O_log.writeline "  Account deaktiviert: JA" 
66.
	Else 
67.
		O_log.writeline  "  Account deaktiviert: Nein" 
68.
	End If 
69.
End Sub 
70.
 
71.
 
Bitte warten ..
Mitglied: hansis1
11.01.2007 um 16:30 Uhr
Hallo!

Wie gesagt, ich muss eine Domäne auslesen.
Wenn ich die Überprüfung, ob der Computer deaktiviert ist, über eine Funktion mache, muss ich natürlich das Objekt übergeben, bzw. den LDAP-Pad.
Ich habe lalle Objecte in einem Recordset. Jetzt müsste ich halt noch den Container auslesen können.
Ich weiss leider absolut nicht, wie ich das machen könnte.

lg
Hansi
Bitte warten ..
Mitglied: Tundra
12.01.2007 um 07:30 Uhr
Hi Hansi,

im Script brauchst Du oben bei C_Domain doch lediglich noch Deine Domäne eintragen, einen Ordner Log haben und schon werden Dir zu jedem Rechner angezeigt, ob er aktiviert oder deaktiviert ist.
Bei mir läuft das Script einwandfrei durch.

Natürlich muss man der Funktion den LDAP-Pfad übergeben, der LDAP-Pfad wird ja auch an der Sub-Routine übergeben.
Obwohl innerhalb der Funktion alles einwandfrei ankam, hat es trotzdem nicht funktioniert.
Aber mit der Routine klappt es einwandfrei.

Hast Du das Script überhaupt schon einmal ausprobiert?

Die Routine F_CheckAccount macht doch genau das, was Du brauchst.

Ausgabe:
149) Name: FA301PC-9
Account deaktiviert: Nein
150) Name: FA395-ALT
Account deaktiviert: JA

Grüße
Guido
Bitte warten ..
Mitglied: hansis1
12.01.2007 um 12:15 Uhr
Hallo!

Danke, jetzt funktioniert es. Hatte nur einen Fehler bei der Abänderung vom Skript.

Danke
Hansi
Bitte warten ..
Mitglied: hansis1
12.01.2007 um 13:41 Uhr
HJallo!

Jetzt hätte ich doch noch eine Frage:

Du rufst die Funktion folgenderweise auf:
01.
O_Log.writeline i & ") Name: " & O_Exec.fields(1) 
02.
Call F_CheckAccount(O_Exec.fields(0))
Woher weisst Du, welchen Feldindex Du verwenden willst? Ich möchte mir nähmlich gerne alle Indizes (sprich Spaltenüberschriften) ausdrucken. Hast Du vielleicht eine Ahnung wie das geht?

Thx
Hansi
Bitte warten ..
Mitglied: Ametrin
20.06.2007 um 10:35 Uhr
Hallo! Da ich erst seit 3 monaten in dieser Branche arbeite und mich mit scripts überhaupt nicht auskenne bitte ich dich (euch) mir das fertige script bereitzustellen damit ich auch die Clienst auslesen kann.
Danke im Vorraus
Bitte warten ..
Mitglied: hansis1
20.06.2007 um 11:17 Uhr
Hallo!

Hier ist mein fertiges Skript:


'Global variables
Const ADS_SCOPE_SUBTREE = 2
Dim OutPutFile
Dim FileSystem

'Initialize global variables
Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
Set OutPutFile = FileSystem.CreateTextFile("Computer.csv", True)
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

'Initialize Recordset
Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = "SELECT ADsPath FROM 'LDAP://DC=nv,DC=at' WHERE objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
'run through recordset
outputfile.writeline "Computername;Letzte Anmeldung;(de)aktiviert"
Do Until objRecordSet.EOF
OutputFile.WriteLine get_Output(objRecordSet.Fields("ADsPath"))
objRecordSet.MoveNext
Loop

'Clean up
OutPutFile.Close
Set FileSystem = Nothing
Set oContainer = Nothing
WScript.Echo "Finished: g:\Skripts\Computer.csv"
WScript.Quit(0)

Function get_Output(objAccount)
Set objComputer = GetObject(objAccount)
Output = objComputer.sAMAccountName & ";" & objComputer.whenChanged
if (objComputer.userAccountControl and 2) Then
Output = Output & ";deaktiviert"
else
Output = Output & ";aktiviert"
end if
get_Output = Output
End Function


lg
Hansi
Bitte warten ..
Mitglied: Ametrin
20.06.2007 um 15:31 Uhr
Und wo oder wie muss ich das jetzt ausführen...und bekomme ich dann die letzten logonzeiten von allen clients???
Bitte warten ..
Mitglied: hansis1
20.06.2007 um 15:50 Uhr
In folgender Zeile gibst Du den Start vom Skript an:

objCommand.CommandText = "SELECT ADsPath FROM 'LDAP://DC=XX,DC=XX' WHERE objectClass='computer'"


Es werden nun alle Computer-Objekte gesucht und in folgender Form in die Datei Computer.csv geschrieben:
Computername Letzte Anmeldung (de)aktiviert
Computername 27.02.2007 18:35 aktiviert

Die Datei gibst Du in folgender Zeile bekannt:

Set OutPutFile = FileSystem.CreateTextFile("Computer.csv", True)

Die Datei wird in das gleiche Verzeichnis geschrieben, in der die .vbs-Datei liegt.

Hoffe Ich habe Dir geholfen.

lg
Hansi
Bitte warten ..
Mitglied: Ametrin
25.06.2007 um 07:52 Uhr
Hallo
Danke für die hilfe...ich habe jedoch ein problem.....der timestamp stimmt nicht. Mein notebook war als seint 3 tagen eingeloggt angezeigt und das kann nicht sein da ich mich jeden abend auslogge. Weiters waren die logonzeiten unserer Server nicht io (einer wurde lt protokoll in der nacht um 22:35 heruntergefahren - da kann aber nicht sein da die niemals offline gehen.) - kann mir jemand erklären was es damit ausich hat? weil auf das ergebniss kann ich mich nicht verlassen.

Mit freundlichen Grüßen Bert
Bitte warten ..
Mitglied: hansis1
26.06.2007 um 11:08 Uhr
Hallo Bert!
Wenn ich es richtig verstanden habe, zeigt Dir das Feld nicht an, wann Du Dich das letzte mal eingeloggt hast, sondern wann sich das Objekt das letzt mal geändert hat.
Und das hat mir in meinem Fall gereicht.

lg
Hansi
Bitte warten ..
Mitglied: Ametrin
27.06.2007 um 15:33 Uhr
Aber in meinem fall reicht das nicht ..ich bräuchte nämlich die letzte Anmeldezeit an der DOMAIN, damit ich die Computer-Leichen aus dem AD entfernen kann...verstehst du mein Problem?

Mit freundlichen Grüßen Bert
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
gelöst Active Directory CA öffentlich vertrauenswürdig machen, geht das? (2)

Frage von DeathangelCH zum Thema Windows Server ...

Windows Server
gelöst Active Directory File Extension - Associated Program (11)

Frage von adm2015 zum Thema Windows Server ...

Windows 8
gelöst Active Directory Default User.v2 Profile - Windows 8.1 Apps Error (4)

Frage von adm2015 zum Thema Windows 8 ...

Windows Server
Active Directory sinnvoll für kleine Firma (15)

Frage von WolfPeano zum Thema Windows Server ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...