Jump to content

alle dcs auf einen bestimmten service prüfen. script zu 90% fertig


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

hi,

 

habe von einem kollegen eine vorlage bekommen für ein script, welches alle dc ausgibt.

 

nun möchte ich jeden dc nach einem bestimmten dienst abfragen, und den status dann mit dem namen des dc in eine liste schreiben.

 

ich hab schon lange nichts mehr mit vb zu tun gehabt, daher bitte ich um hilfe.

 

 

 

mein teil, der noch nicht funktioniert, ist FETT. wäre wohl zu einfach. unter dem script ist auch gleich das originalscript.

 

hilfe wäre suuuuuuuuuuuper. danke

 

 

 

 

 

' EnumDCs.vbs

' VBScript program to enumerate all Domain Controllers in the domain.

'

' ----------------------------------------------------------------------

' Copyright © 2002 Richard L. Mueller

' Hilltop Lab web site - Hilltop Lab

' Version 1.0 - November 10, 2002

' Version 1.1 - February 19, 2003 - Standardize Hungarian notation.

' Version 1.2 - March 11, 2003 - Remove SearchScope property.

'

' Program enumerates all Domain Controllers, their DNS host name, and

' the name of the site they reside in.

'

' You have a royalty-free right to use, modify, reproduce, and

' distribute this script file in any way you find useful, provided that

' you agree that the copyright owner above has no warranty, obligations,

' or liability for such use.

 

Option Explicit

 

Dim objRootDSE, strConfig, adoConnection, adoCommand, strQuery

Dim adoRecordset, objDC, objSite

 

' Determine configuration context from RootDSE object.

Set objRootDSE = GetObject("LDAP://RootDSE")

strConfig = objRootDSE.Get("configurationNamingContext")

 

' Use ADO to search Active Directory for ObjectClass nTDSDSA.

Set adoCommand = CreateObject("ADODB.Command")

Set adoConnection = CreateObject("ADODB.Connection")

adoConnection.Provider = "ADsDSOObject"

adoConnection.Open "Active Directory Provider"

adoCommand.ActiveConnection = adoConnection

 

strQuery = "<LDAP://" & strConfig _

& ">;(ObjectClass=nTDSDSA);AdsPath;subtree"

 

adoCommand.CommandText = strQuery

adoCommand.Properties("Page Size") = 100

adoCommand.Properties("Timeout") = 30

adoCommand.Properties("Cache Results") = False

 

Set adoRecordset = adoCommand.Execute

 

' The parent object of each object with ObjectClass=nTDSDSA is a Domain

' Controller. The parent of each Domain Controller is a "Servers"

' container, and the parent of this container is the "Site" container.

Do Until adoRecordset.EOF

Set objDC = GetObject( _

GetObject(adoRecordset.Fields("AdsPath").Value).Parent)

Set objSite = GetObject(GetObject(objDC.Parent).Parent)

cmd("sc query "Automatisches LiveUpdate - Scheduler" >> C:\test.txt ")

adoRecordset.MoveNext

Loop

adoRecordset.Close

 

' Clean up.

adoConnection.Close

Set objRootDSE = Nothing

Set adoCommand = Nothing

Set adoConnection = Nothing

Set adoRecordset = Nothing

Set objDC = Nothing

Set objSite = Nothing

 

Wscript.Echo "Done"

 

 

 

 

 

 

 

 

----------------originalscript - auszug - ohne meine änderungen. (fett hab ich gelöscht)

 

GetObject(adoRecordset.Fields("AdsPath").Value).Parent)

Set objSite = GetObject(GetObject(objDC.Parent).Parent)

Wscript.Echo "Domain Controller: " & objDC.cn & vbCrLf _

& "DNS Host Name: " & objDC.DNSHostName & vbCrLf _

& "Site: " & objSite.name

adoRecordset.MoveNext

Link zu diesem Kommentar

In Deinem VBScript könntest du ggf. auch die SC-Zeile durch sowas in der Art ersetzen:

strServer=mid(objDC.Name,4)
strService = "wuauserv"
On error resume next
Set dienst = GetObject("WinNT://" & strServer & "/" & strService & ",service")
If Err=0 then
 if dienst.status = 4 then
   wscript.echo "Dienst " & strService & " auf " & strServer & " gestartet"
 else
   wscript.echo "Dienst " & strService & " auf " & strServer & " nicht gestartet"
 end if
else
 'Fehler
 wscript.echo "Dienst " & strService & " auf " & strServer & " nicht installiert"
end if
On error goto 0

 

Statt wscript.echo wäre auch eine Ausgaben in eine Datei möglich.

Die Startart (Autom./Manuell...) könnte man auch noch mit erfassen über "dienst.StartType".

Link zu diesem Kommentar

...sich Scripte zusammensuchen, keine Ahnung davon haben und dann von anderen umbauen lassen - typisch :D

 

Hier mit Ausgabe in CSV. Die von mir eingefügten Zeilne stehen jeweils zwischen den Rauten-Kommentaren.

' VBScript program to enumerate all Domain Controllers in the domain.
'
' ----------------------------------------------------------------------
' Copyright (c) 2002 Richard L. Mueller
' Hilltop Lab web site - Hilltop Lab
' Version 1.0 - November 10, 2002
' Version 1.1 - February 19, 2003 - Standardize Hungarian notation.
' Version 1.2 - March 11, 2003 - Remove SearchScope property.
'
' Program enumerates all Domain Controllers, their DNS host name, and
' the name of the site they reside in.
'
' You have a royalty-free right to use, modify, reproduce, and
' distribute this script file in any way you find useful, provided that
' you agree that the copyright owner above has no warranty, obligations,
' or liability for such use.
'Option Explicit

'##########
strFileName = "C:\DC-Dienste.csv"
strService = "wuauserv"

Set MyFiles = CreateObject("Scripting.FileSystemObject")
Set f = MyFiles.OpenTextFile(strFilename, 2, True)
f.writeline "Server;Dienst;Status;Startart"
'##########

Set WSHShell = WScript.CreateObject("WScript.Shell")

Dim objRootDSE, strConfig, adoConnection, adoCommand, strQuery
Dim adoRecordset, objDC, objSite

' Determine configuration context from RootDSE object.
Set objRootDSE = GetObject("LDAP://RootDSE")
strConfig = objRootDSE.Get("configurationNamingContext")

' Use ADO to search Active Directory for ObjectClass nTDSDSA.
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = adoConnection

strQuery = "<LDAP://" & strConfig _
& ">;(ObjectClass=nTDSDSA);AdsPath;subtree"

adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 100
adoCommand.Properties("Timeout") = 30
adoCommand.Properties("Cache Results") = False

Set adoRecordset = adoCommand.Execute

' The parent object of each object with ObjectClass=nTDSDSA is a Domain
' Controller. The parent of each Domain Controller is a "Servers"
' container, and the parent of this container is the "Site" container.
Do Until adoRecordset.EOF
Set objDC = GetObject( _
GetObject(adoRecordset.Fields("AdsPath").Value).Parent)
Set objSite = GetObject(GetObject(objDC.Parent).Parent)

'##########
strServer=mid(objDC.Name,4)
On error resume next
Set dienst = GetObject("WinNT://" & strServer & "/" & strService & ",service")
If Err=0 then
 Select Case dienst.status
case 1
  strStatus ="gestoppt"
case 4
  strStatus ="gestartet"
case else
  strStatus ="unbekannt"
 end select	
 Select Case dienst.starttype
case 2
  strStartart ="Automatisch"
case 3
  strStartart ="Manuell"
case 4
  strStartart ="Deaktiviert"
case else
  strStartart ="unbekannt"
 end select	
else
 'Fehler
 strStatus = "nicht installiert"
 strStartart = ""
end if
f.writeline strServer & ";" & strService & ";" & strStatus & ";" & strStartart
On error goto 0
'##########

adoRecordset.MoveNext
Loop
adoRecordset.Close

' Clean up.
adoConnection.Close
Set objRootDSE = Nothing
Set adoCommand = Nothing
Set adoConnection = Nothing
Set adoRecordset = Nothing
Set objDC = Nothing
Set objSite = Nothing

'##########
f.close
Set MyFiles = Nothing

Wscript.Echo "Fertig. Ausgabedatei: " & StrFilename
'##########

Link zu diesem Kommentar

Als kleine Ergänzung zu Frank's Weg über den WinNT Provider eine Möglichkeit das per wmi zu machen...

 

Dim objWMIService, colItems
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery( _
   "SELECT * FROM Win32_Service",,48) 
For Each objItem in colItems

   If instr(objItem.Name, "Automatisches LiveUpdate - Scheduler") > 0 Then
      state = objItem.State
      b_found = True
      Exit For
   Else
   End if   
Next
If b_found Then
  MsgBox "Service " & objItem.Name &" state "& state
Else
  MsgBox "Service Not found"
End If

 

Gruß

 

Dirk

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...