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

AD - auslesen nach OS, Computer, Lastlogon, Ping - VB Script

Frage Entwicklung VB for Applications

Mitglied: DerSven2

DerSven2 (Level 1) - Jetzt verbinden

26.03.2012, aktualisiert 30.03.2012, 7298 Aufrufe, 12 Kommentare

//edit hier die funktionierende Version - kein Grund die unteren Konversation durchzugehen.

Das Skript liest euch Active Directory aus nach folgenden Kriterien:

Computerobjekte - die mit OS Windows XP laufen, erstellt ein .txt File und schreibt euch folgendes rein:

Computername, OS, Last Logontime und ein Ping auf jedes Objekt (wobei eine Antwort 0= Online und 11004=Offline bedeutet)

Hoffe das hilft !

Lg. S



01.
' Skript to check Active Directory for : Operating System, object=Computer, ping each Comp.object and create a .txt report  
02.
' march 2012 
03.
' intressting = Replace function !! (see line 36) 
04.
 
05.
 
06.
 
07.
 
08.
'on error resume next 
09.
 
10.
strComputer = "." 
11.
Set objOU = GetObject ("LDAP://OU=XXXXXXXXXX,DC=XXX,DC=XXX") 
12.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
13.
Set objTextFile = objFSO.CreateTextFile ("\\Networkpath\users\XXX\Desktop\Logfile.txt", ForAppending = 8) 
14.
 
15.
	for each objMember in objOU 
16.
 
17.
		if objMember.Class = "computer" and objMember.operatingSystem = "Windows XP Professional" then 
18.
 
19.
			set objLastLogon = objMember.Get("lastLogonTimestamp") 
20.
			i8High = objLastLogon.HighPart 
21.
			i8Low = objLastLogon.LowPart  
22.
 
23.
				If (i8Low < 0) Then 
24.
				i8High = i8High + 1 
25.
			End If 
26.
 
27.
				intLastLogonTime = i8High  * (2^32) + i8Low  
28.
				intLastLogonTime = intLastLogonTime / (60 * 10000000) 
29.
				intLastLogonTime = intLastLogonTime / 1440 
30.
 
31.
	 
32.
				Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
33.
				Set colPings = objWMIService.ExecQuery("Select * From Win32_PingStatus where Address ='"& Replace(objMember.sAMAccountName, "$", "") & "'") 
34.
				 
35.
				For Each objItem In colPings 
36.
				onlStatus = objItem.PrimaryAddressResolutionStatus  
37.
 
38.
				Next 
39.
				 
40.
			objTextFile.WriteLine("PC Name:  " & Replace(objMember.sAMAccountName, "$", "") & " , Operating System :" & objMember.operatingSystem & " , Last logontime : " & intLastLogonTime + #1/1/1601# & "  Onlinestatus : " & onlstatus) 
41.
 
42.
		end if 
43.
		 
44.
		next 
45.
objTextFile.Close 
46.
 
47.
set objOU = nothing 
48.
set objMember = nothing 
49.
set objLastLogon = nothing 
50.
set objWMIService = nothing 
51.
 
52.
wscript.quit
[Edit Biber] Codeformatierung [/Edit]
Mitglied: bastla
26.03.2012 um 20:03 Uhr
Hallo DerSven2 und willkommen im Forum!

Versuch es mal so:
Set colPings = objWMIService.ExecQuery("Select * From Win32_PingStatus where Address ='"& objMember.name & "'")
Grüße
bastla
Bitte warten ..
Mitglied: DerSven2
28.03.2012 um 17:07 Uhr
Hallo
Danke dir auf alle Faelle fuer die Antowort!

Das habe ich auch versucht - ich bleibe dann auf den folgenden 3 Zeilen haengen mit: " Object doesn't support this property or method: 'colPings.PrimaryAddressResolutionStatus'


' on error resume next

strComputer = "."
Set objOU = GetObject ("LDAP://OU=Desktops,OU=Systems,OU=xx,DC=ca")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile ("\\rinas1p2\users\xxxs\Desktop\x\XXX.txt", ForAppending = 8)

for each objMember in objOU

if objMember.Class = "computer" and objMember.operatingSystem = "Windows XP Professional" then

set objLastLogon = objMember.Get("lastLogonTimestamp")
i8High = objLastLogon.HighPart
i8Low = objLastLogon.LowPart

If (i8Low < 0) Then
i8High = i8High + 1
End If

intLastLogonTime = i8High * (2^32) + i8Low
intLastLogonTime = intLastLogonTime / (60 * 10000000)
intLastLogonTime = intLastLogonTime / 1440


Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colPings = objWMIService.ExecQuery("Select * From Win32_PingStatus where Address ='"& objMember.name & "'")
Set onlStatus = colpings.PrimaryAddressResolutionStatus
objTextFile.WriteLine("PC Name: " & objMember.Name & " , Operating System :" & objMember.operatingSystem & " , " & intLastLogonTime + #1/1/1601# & "Onlinestatus : " & onlstatus)

end if
objTextFile.Close

set objOU = nothing
set objMember = nothing
set objLastLogon = nothing
set objWMIService = nothing

next
wscript.quit
Bitte warten ..
Mitglied: bastla
28.03.2012 um 17:16 Uhr
Hallo DerSven2!

Vorweg: Findest Du nicht, dass Dein (von Biber für Dich formatierter) Code im Eröffnungsposting viel leserlicher ist? Die entsprechende Formatierung geht auch gar nicht so schwer (http://www.administrator.de/helpsystem/detail.php?idx=20#toc28 ) und lässt sich auch nachträglich noch einbauen ...
Ich würde einfach
onlStatus = colPings.StatusCode
verwenden, auf jeden Fall aber das "Set" weglassen ...

Grüße
bastla
Bitte warten ..
Mitglied: DerSven2
28.03.2012 um 17:23 Uhr
//edit - die Einrueckungen werden nicht uebernommen.
edit 2 - hab rausgefunden wie das funktioniert auf dem Board
edit 3 - irgendwie funktioniert die formatierung leider nicht ganz wie ich mir das vorstelle - sorry !


gesagt getan! (wenn du das mit einruecken meintest?)

Fehler bleibt leider der gleiche (object doesnt support (...) 'colping.StatusCode')


01.
' on error resume next 
02.
 
03.
strComputer = "." 
04.
Set objOU = GetObject ("LDAP://OU=Desktops,OU=Systems,OU=XXX,DC=ca") 
05.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
06.
Set objTextFile = objFSO.CreateTextFile ("\\rinas1p2\users\XXXs\Desktop\x\XXX.txt", ForAppending = 8) 
07.
 
08.
for each objMember in objOU 
09.
 
10.
	if objMember.Class = "computer" and objMember.operatingSystem = "Windows XP Professional" then 
11.
 
12.
		set objLastLogon = objMember.Get("lastLogonTimestamp") 
13.
		i8High = objLastLogon.HighPart 
14.
		i8Low = objLastLogon.LowPart  
15.
 
16.
			If (i8Low < 0) Then 
17.
			i8High = i8High + 1 
18.
		End If 
19.
 
20.
			intLastLogonTime = i8High  * (2^32) + i8Low  
21.
			intLastLogonTime = intLastLogonTime / (60 * 10000000) 
22.
			intLastLogonTime = intLastLogonTime / 1440 
23.
 
24.
	 
25.
		Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
26.
		Set colPings = objWMIService.ExecQuery("Select * From Win32_PingStatus where Address ='"& objMember.name & "'") 
27.
		onlStatus = colpings.StatusCode 
28.
		objTextFile.WriteLine("PC Name:  " & objMember.Name & " , Operating System :" & objMember.operatingSystem & " , " & intLastLogonTime + #1/1/1601# & "Onlinestatus : " & onlstatus) 
29.
 
30.
	end if 
31.
objTextFile.Close 
32.
 
33.
set objOU = nothing 
34.
set objMember = nothing 
35.
set objLastLogon = nothing 
36.
set objWMIService = nothing 
37.
 
38.
next 
39.
wscript.quit 
40.
 
Bitte warten ..
Mitglied: bastla
28.03.2012 um 17:53 Uhr
Hallo DerSven2!

Neuer Versuch :
01.
For Each objItem In colPings 
02.
    onlStatus = objItem.PrimaryAddressResolutionStatus 
03.
Next
Grüße
bastla
Bitte warten ..
Mitglied: DerSven2
28.03.2012 um 19:00 Uhr
Das sieht schon verdamt gut aus !
Einziger Wodkatropfen: er schreibt eine Zeile komplett korrekt !!! (mit aktuellem Pingstatus 0= online 11004= not reachable), nach der ersten Zeile wirft er dann allerdigs ein:

Line 28 char.4 : Object variable not set

aus.

\\ein Ding habe ich gerdae noch gefunden, die Ausgabe ist in CN="PCname" und ein Ping auf ein "CN=Pcname" klappt natuerlich nie da die PCs eben nicht CN=xyz benannt sind. Das muss ich noch umbauen.
Bitte warten ..
Mitglied: bastla
28.03.2012 um 19:32 Uhr
Hallo DerSven2!
Line 28 char.4 : Object variable not set
Die Zeile 31 muss nach dem "Next" platziert werden, und die Zeilen 33 bis 36 kannst Du weglassen (oder zumindest ebenfalls aus der Schleife raus nach unten verschieben) ...
die Ausgabe ist in CN="PCname"
Dann wäre wohl
objMember.sAMAccountName
besser ...

Grüße
bastla
Bitte warten ..
Mitglied: DerSven2
28.03.2012 um 21:18 Uhr
ich habe keine Ahnung woher du siehst in welche Zeile ein "next" gehoert - aber es funktioniert !

das letzte, letzte Ding ist nur noch das ich als Pingantwort fuer jedes einzelen Computerobject "11004"(offline) bekomme, welches nicht richtig ist da viele Online sind. "gruebel"


//edit - wenn ich in "PCName :" & objMember.sAMAccountName .... aendere bekomme ich als Antwort:

PC Name: DUOCOM1$ , Operating System :Windows XP Professional , 22.03.2012 02:06:51Onlinestatus : 11004
PC Name: DUOCOM2$ usw.usw.usw
daher gehen die Pings auch nicht da am "ADObjektnamen" nun ein $ irgendwoher kommt. Ich versuche mal rauszubekommen woher die kommen.

Auch und gleich noch mal 100 danke an dich , einfach fuer deine Hilfe !

Mit freundlichen Grüßen Sven


01.
  
02.
'on error resume next 
03.
 
04.
strComputer = "." 
05.
Set objOU = GetObject ("LDAP://OU=xxx,DC=ca") 
06.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
07.
Set objTextFile = objFSO.CreateTextFile ("\\rinas1p2\users\xxxs\Desktop\x\XXX.txt", ForAppending = 8) 
08.
 
09.
	for each objMember in objOU 
10.
 
11.
		if objMember.Class = "computer" and objMember.operatingSystem = "Windows XP Professional" then 
12.
 
13.
			set objLastLogon = objMember.Get("lastLogonTimestamp") 
14.
			i8High = objLastLogon.HighPart 
15.
			i8Low = objLastLogon.LowPart  
16.
 
17.
				If (i8Low < 0) Then 
18.
				i8High = i8High + 1 
19.
			End If 
20.
 
21.
				intLastLogonTime = i8High  * (2^32) + i8Low  
22.
				intLastLogonTime = intLastLogonTime / (60 * 10000000) 
23.
				intLastLogonTime = intLastLogonTime / 1440 
24.
 
25.
	 
26.
				Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
27.
				Set colPings = objWMIService.ExecQuery("Select * From Win32_PingStatus where Address ='"& objMember.sAMAccountName & "'") 
28.
				For Each objItem In colPings 
29.
				onlStatus = objItem.PrimaryAddressResolutionStatus  
30.
 
31.
				Next 
32.
 
33.
			objTextFile.WriteLine("PC Name:  " & objMember.Name & " , Operating System :" & objMember.operatingSystem & " , " & intLastLogonTime + #1/1/1601# & "Onlinestatus : " & onlstatus) 
34.
 
35.
		end if 
36.
		 
37.
		next 
38.
objTextFile.Close 
39.
 
40.
set objOU = nothing 
41.
set objMember = nothing 
42.
set objLastLogon = nothing 
43.
set objWMIService = nothing 
44.
 
45.
wscript.quit
Bitte warten ..
Mitglied: bastla
28.03.2012 um 21:33 Uhr
Hallo DerSven2!

Ah ja, dass Computernamen automatisch mit "$" am Ende dargestellt werden, hatte ich auch nicht bedacht - aber dagegen gibt's ja "Replace()", also etwa:
Replace(objMember.sAMAccountName, "$", "")
Grüße
bastla
Bitte warten ..
Mitglied: DerSven2
28.03.2012 um 22:20 Uhr
Also an dieser Stelle ein BIG THANK YOU - an dich !

es klappt nun einwandfrei.

Ich moechte es noch um ein paar Kleinigkeiten erweitern (aktuell angemldeter USer (mit Sysinternals sollte das einfach sein) und aktuelle OU, vielleicht noch "aktiv/disabled" aber das ist alles Kosmetik.)

Ich werde ein Update posten sobald es feritg ist damit andere auch davon profitieren koennen - fuer mich ist heute Feierabend ich bin auf ein Bier - ich lad dich virutell zumindest ein da ich gerade in Kanda sitze ! ;)
Danke und beste Gruesse
Sven


ps. das mit" Replace(objMember.sAMAccountName, "$", "") ist wirklich brauchbar - damit sollte sich ansich das "CN= " Problem auch loesen lassen (verusuche ich morgen mal )
Bitte warten ..
Mitglied: bastla
28.03.2012 um 22:26 Uhr
Hallo DerSven2!
damit sollte sich ansich das "CN= " Problem auch loesen lassen
Das sollte sich ja mit "sAMAccountName" ohnehin nicht mehr ergeben - ansonsten gäbe es auch noch "Split()":
Split(objMember.Name, "=")(1)
Grüße
bastla

... und Prost
Bitte warten ..
Mitglied: DerSven2
30.03.2012 um 15:59 Uhr
in Post 1 nun die letzte Version gepostet - Danke noch mal - jetzt ist nur noch Kosmetik angesagt
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Outlook & Mail
gelöst Email Anhänge speichern VB Script aber nur bestimmte Dateitypen (Outlook) (4)

Frage von LindeUnimog zum Thema Outlook & Mail ...

VB for Applications
gelöst VB Script rekursiv statt nur ein Ordner (4)

Frage von Saschaaaaa zum Thema VB for Applications ...

VB for Applications
gelöst VB Script nach gefundenem Wort die nächsten 4 Zeichen ersetzten (2)

Frage von deutsch73 zum Thema VB for Applications ...

Entwicklung
Ping per Lua Script (1)

Frage von fuddel18 zum Thema Entwicklung ...

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 ...