Seitenindex umschalten Seiten: [1] 2  Thema versendenDrucken
Heißes Thema (mehr als 10 Antworten) RebootRequired abfragen (Gelesen: 2914 mal)
lenny
WSUS Senior Member
***
Offline


I Love LDAP!

Beiträge: 190
Mitglied seit: 06.10.09
Geschlecht: männlich
RebootRequired abfragen
16.06.11 um 16:38:52
Beitrag drucken  
Hallo Kollegen,

ich versuche gerade ein Script zu basteln, was einmal in der Woche (in unserem Wartungsfenster) alle meine Server neu startet und und per Mail über das Erbegnis informiert.
Aber es soll natürlich nur ein Reboot durchgeführt werden, wenn Windows auch einen Neustart durch Updates wünscht.
Natürlich könnte ich mir nun einen abbrechen und versuchen die Windowsupdate.log so zu zerlegen, dass er den eintrag RebootRequired findet, aber ich denke das ist ein wenig mit Kanonen auf Spatzen geschossen.

Gibt es irgendwo einen RegKey oder eine Datei, an der man(n) festmachen kann, ob Neu gestartet werden soll?

Würde mich über Antwort freuen.



Grüße Lenny
  
Zum Seitenanfang
 
Sunny
Microsoft MVP
*****
Offline



Beiträge: 15134
Mitglied seit: 11.02.07
Geschlecht: männlich
Re: RebootRequired abfragen
Antwort #1 - 16.06.11 um 17:22:30
Beitrag drucken  
Aus dem Stehgreif hab ich jetzt kein Script zur Hand, aber im Scriptingcenter solltest Du IMHO fündig werden: (Du musst Dich Einloggen oder Registrieren um Multimediadateien oder Links zu sehen).
  
Zum Seitenanfang
 
UMeadow
WSUS Spezialist
*****
Offline


I Love WSUS!

Beiträge: 1381
Standort: Berlin
Mitglied seit: 22.01.08
Geschlecht: männlich
Re: RebootRequired abfragen
Antwort #2 - 16.06.11 um 18:14:16
Beitrag drucken  
In den Update Services 3.0 API Samples and Tools gab es ein Visual Basic Script - ComputersNeedingReboot - das hat eine HTML Datei erstellt, fütr alle Computer die ein Reboot benötigen.
Ich weiß nur nicht ob es die API Samples noch gibt.
  
Zum Seitenanfang
 
WSUS.DE-Admin
Administrator
*****
Offline


I love WSUS

Beiträge: 1012
Standort: Essen
Mitglied seit: 31.03.05
Geschlecht: männlich
Re: RebootRequired abfragen
Antwort #3 - 17.06.11 um 08:11:41
Beitrag drucken  
Wie wär´s denn damit?

(Du musst Dich Einloggen oder Registrieren um Multimediadateien oder Links zu sehen).
  
Zum Seitenanfang
lenny
WSUS Senior Member
***
Offline


I Love LDAP!

Beiträge: 190
Mitglied seit: 06.10.09
Geschlecht: männlich
Re: RebootRequired abfragen
Antwort #4 - 17.06.11 um 11:00:46
Beitrag drucken  
Hallo Ihr 3 Danke für die schnelle Hilfe, die Scripts sind super.
Leider klappt das aber noch nicht so wirklich, da ich zwar die ausgegebenen Server alle runterfahren könnte, aber es halt doch 1 oder 2 gibt die untereinander Abhängiglkeiten haben, somit muss ihc wohl danach auch noch Filtern.

Wir werden sehen wo das alles hinführt Durchgedreht

Danke für die Hilfe.

mfg

PS:
Code
[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | out-null

if (!$wsus) {
        $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();
}

$computerScope = new-object Microsoft.UpdateServices.Administration.ComputerTargetScope;
$computerScope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::InstalledPendingReboot;

$updateScope = new-object Microsoft.UpdateServices.Administration.UpdateScope;
$updateScope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::InstalledPendingReboot;

$computers = $wsus.GetComputerTargets($computerScope);

$computers | foreach-object {
                $_.FullDomainName | write-host ;
               
}  



Kann mir noch einer sagen, wie ich vielleicht nur eine gewisse Gruppe des WSUS auslese?

Powershell ist für mich absolutes Neuland... Schockiert/Erstaunt...
  
Zum Seitenanfang
 
DESoft
WSUS Experte
*****
Offline


I Love WSUS!<br />

Beiträge: 702
Standort: Magdeburg
Mitglied seit: 24.07.08
Re: RebootRequired abfragen
Antwort #5 - 19.06.11 um 17:37:15
Beitrag drucken  
Hallo lenny,

lenny schrieb on 16.06.11 um 16:38:52:
ich versuche gerade ein Script zu basteln, was einmal in der Woche (in unserem Wartungsfenster) alle meine Server neu startet und und per Mail über das Erbegnis informiert. 

Da ist schon mal entscheiden, wo das Script läuft,
1) auf einem WSUS-Server remote gegen andere Server,
2) auf einer Wks (mit oder ohne WSUS-Console) remote gegen andere Server
3) auf jedem betroffenen Server (Interaktiv oder Scheduled initiiert)
Da ist entscheidend, welches API vor Ort vorhanden ist.
Es gibt ein API für WSUS-Server (Microsoft.UpdateServices.Administration) und für Clients (Bestandteil jedes WUA). Durchgedreht

lenny schrieb on 16.06.11 um 16:38:52:
Aber es soll natürlich nur ein Reboot durchgeführt werden, wenn Windows auch einen Neustart durch Updates wünscht. 

Das kann nur Windows bzw der WUA entscheiden. Durchaus können mehrere Updatedurchläufe mit erforderlichem Neustart auftreten. Das liegt an dem Prinzip "Neue Voraussetzung durch neu installierte Updates"!
D.h. nach einem Neustart sollte erneut auf erforderliche Updates geprüft werden. Schockiert/Erstaunt

lenny schrieb on 16.06.11 um 16:38:52:
Natürlich könnte ich mir nun einen abbrechen und versuchen die Windowsupdate.log so zu zerlegen, dass er den eintrag RebootRequired findet, aber ich denke das ist ein wenig mit Kanonen auf Spatzen geschossen.

Richtig. Je nach API kann dieses Erfordernis geprüft werden. Mit dem Client-API vor Ort, z.B. nach dem Installationsdurchlauf. Mit dem WSUS-Server-API, wenn der Client (nach gewisser Zeit!) den Zustand des RebootNeeded dem WSUS-Server gemeldet hat. hä?

lenny schrieb on 16.06.11 um 16:38:52:
Gibt es irgendwo einen RegKey oder eine Datei, an der man(n) festmachen kann, ob Neu gestartet werden soll?

Besser nicht, das API arbeitet immer zuverlässiger, als irgendeine freie Interpretation eine Datei oder der Registry. Die Funktionsaufrufe takten sich in die internen Mechanismen sauber ein, so das eine Situation aktueller ermittelt wird, als irgend eine Stelle im Windows, die eventuell mit tollerierter Zeitverzögerung irgendwo etwas z.B. visualisieren soll. Dafür ist das API ja da. Zwinkernd

lenny schrieb on 17.06.11 um 11:00:46:
Powershell ist für mich absolutes Neuland... 

Mein Tipp:
Installiert Dir das Visual Studio 2010 Express auf eine Kiste. Das ist kostenlos und bietet Dir die Möglichkeit eines übersichtlichen umfangreichen Studiums beider API-Bestandteile an. Ergänzend wirst Du auch punktuell an die Onlinehilfe im MSDN weitergeleitet. Da klären sich bestehende Verständnisprobleme schnell auf. Zwinkernd

Ich denke, da werden Dir die Augen übergehen und neue Ideen kommen. Viel Spaß. Laut lachend

PS: Die Erkenntnisse kannst Du leicht in PowerShell übertragen. Das ist dann nur ein Syntax-Problem. Zwinkernd

PS2: Dein Ergebnis wär hier im Forum dankenswert aufgehoben. Wie wärs ... Smiley

Gruß Dani
  
Zum Seitenanfang
 
DESoft
WSUS Experte
*****
Offline


I Love WSUS!<br />

Beiträge: 702
Standort: Magdeburg
Mitglied seit: 24.07.08
Re: RebootRequired abfragen
Antwort #6 - 19.06.11 um 17:58:16
Beitrag drucken  
Ach was ich noch vergessen habe:

Das API auf den Clients (WUA) ist weitgehend gegen Remotezugriff abgeschirmt.
Das ist ausführlich im TechNet dokumentiert.
Damit kann jeder mit ruhigem Gewissen seinem Chef erklären, dass bei aktiviertem Windows Update KEINE unzulässige Fernsteuerung oder Manipulation möglich ist.
Der Agent ist selbstständig und reagiert nur auf konfigurative Situationen am Client vor Ort.

Darum betet Großmeister Sunny immer:
"Der WSUS tut nix außer auf dem Silbertablett die Updates bereitzustellen, der Client meldet sich am WSUS und erledigt das eigentliche Geschäft." Zwinkernd

Gruß Dani
  
Zum Seitenanfang
 
lenny
WSUS Senior Member
***
Offline


I Love LDAP!

Beiträge: 190
Mitglied seit: 06.10.09
Geschlecht: männlich
Re: RebootRequired abfragen
Antwort #7 - 21.06.11 um 13:58:25
Beitrag drucken  
Hallo Kollegen,

mein Script wächst und gedeit... was ich aber noch nicht herausgefunden habe, wie kann ich über die Powershell einzelne WSUS Gruppen ansprechen. Ich möchte eigentlich nur die Server durchstarten und keine Clients...

Grüße Lenny
  
Zum Seitenanfang
 
DESoft
WSUS Experte
*****
Offline


I Love WSUS!<br />

Beiträge: 702
Standort: Magdeburg
Mitglied seit: 24.07.08
Re: RebootRequired abfragen
Antwort #8 - 19.07.11 um 00:45:37
Beitrag drucken  
Hi lenny,

lenny schrieb on 17.06.11 um 11:00:46:
Kann mir noch einer sagen, wie ich vielleicht nur eine gewisse Gruppe des WSUS auslese?


Ich würde es so machen:
1.) Collection aller Gruppen abrufen.
2.) Index meiner Gruppe ermitteln.
3.) Wenn Gruppe existiert, also Index > -1, Gruppenobjekt der Suchfilterobjekt-Eigenschaft "Gruppenliste" hinzufügen.
4.) bei tiefer gehenden Gruppenstrukturen die Suche in untergeordneten Gruppen aktivieren.

Code
$computerScope = new-object Microsoft.UpdateServices.Administration.ComputerTargetScope;
$collection = $wsus.GetComputerTargetGroupCollection();
$Idx = $collection.IndexOf("MyGroup");
if ($Idx -gt -1)
      $computerScope.ComputerTargetGroups.Add($collection.item[$Idx]);
$computerScope.IncludeSubgroups = true; 


So legst Du fest, in welchen Gruppenobjekt(en) Computer gesucht werden sollen. Ggf. sollen auch Untergruppen durchsucht werden. Zwinkernd

Probiers mal aus.

Gruß Dani
  
Zum Seitenanfang
 
lenny
WSUS Senior Member
***
Offline


I Love LDAP!

Beiträge: 190
Mitglied seit: 06.10.09
Geschlecht: männlich
Re: RebootRequired abfragen
Antwort #9 - 28.07.11 um 09:52:49
Beitrag drucken  
Hallo,

ich habe leichte Schwierigkeiten...
Bin leider Powershellneuling...
Mein Script sieht nun so aus....
Code
[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | out-null

if (!$wsus)
{
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer();
}
Remove-Item W:\Wsus\Clients_reboot_needed.txt
Start-Sleep -s 2
$file1 = "W:\Wsus\Clients_reboot_needed.txt"


$computerScope = new-object Microsoft.UpdateServices.Administration.ComputerTargetScope;

$collection = $wsus.GetComputerTargetGroupCollection();
$Idx = $collection.IndexOf("Server");
if ($Idx -gt -1){
	$computerScope.ComputerTargetGroups.Add($collection.item[$Idx]);
}
#	$computerScope.IncludeSubgroups = true;
 


Wenn ich nun das Script ausführe, meldet er folgendes:
Code
Fehler beim Aufrufen der Methode, da [Microsoft.UpdateServices.Internal.BaseApi.UpdateServer] keine Methode mit dem Namen "GetComputerTar
getGroupCollection" enthält.
Bei W:\WSUS\Server_reboot_required.ps1:14 Zeichen:53
+ $collection = $wsus.GetComputerTargetGroupCollection <<<< ();
    + CategoryInfo          : InvalidOperation: (GetComputerTargetGroupCollection:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen.
Bei W:\WSUS\Server_reboot_required.ps1:15 Zeichen:27
+ $Idx = $collection.IndexOf <<<< ("Server");
    + CategoryInfo          : InvalidOperation: (IndexOf:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

In einem NULL-Array kann kein Index erstellt werden.
Bei W:\WSUS\Server_reboot_required.ps1:17 Zeichen:59
+     $computerScope.ComputerTargetGroups.Add($collection.item[ <<<< $Idx]);
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

 


Kannst du mir sagen, was er mir mitteilen möchte?

Grüße Lenny
  
Zum Seitenanfang
 
Sunny
Microsoft MVP
*****
Offline



Beiträge: 15134
Mitglied seit: 11.02.07
Geschlecht: männlich
Re: RebootRequired abfragen
Antwort #10 - 28.07.11 um 11:50:11
Beitrag drucken  
Schau dir die Nummer 8 an, evtl. suchst Du das: (Du musst Dich Einloggen oder Registrieren um Multimediadateien oder Links zu sehen).
  
Zum Seitenanfang
 
lenny
WSUS Senior Member
***
Offline


I Love LDAP!

Beiträge: 190
Mitglied seit: 06.10.09
Geschlecht: männlich
Re: RebootRequired abfragen
Antwort #11 - 29.07.11 um 07:38:43
Beitrag drucken  
Hallo Sunny,

danke für Deine Mühen.
Ich kann diesen Key leider nur auf Windows 7 Clients finden. Unter XP, 2k3, 2k8, 2k8R2 habe ich Ihne bisher nicht gefunden. Ich werde mal weiter forschen ob es sowas in der Art gibt. Meine Clients starten jeden Abend neu. Mich würden momentan nur die Server interessieren. Mein Script macht ja auch schon wunderbar das was es soll. Nur bekomme ich nicht hin, dass er nach Gruppe Filtern kann. Das ist aber eher ein Schönheitsfehler.

Was noch Charm hätte........ Ich habe einen Master Server auf dem das Script läuft. Zusätlich betreibe ich noch 3 Replikaserver. Clients und Server die über diese Replikas verwaltet werden, werden im Script nicht abgefragt. Ich müsste also auf jedem WSUS dieses Script einpflegen...
Wenn ich das noch in den Griff bekommen würde, wäre meine kleine Welt in Ordnung...

Grüße Lenny
  
Zum Seitenanfang
 
DESoft
WSUS Experte
*****
Offline


I Love WSUS!<br />

Beiträge: 702
Standort: Magdeburg
Mitglied seit: 24.07.08
Re: RebootRequired abfragen
Antwort #12 - 30.07.11 um 20:13:23
Beitrag drucken  
Hi lenny,

leider mein (Schreib-) Fehler!!!! Sorry... sorry, sorry. weinend

Die richtige (und existente) Procedure ist:

Code
$collection = $wsus.GetComputerTargetGroups(); 



Das Ergebnis ist eine ComputerTargetGroupCollection.

Das kannst Du auch hier nachlesen:

(Du musst Dich Einloggen oder Registrieren um Multimediadateien oder Links zu sehen).

Gruß Dani
  
Zum Seitenanfang
 
DESoft
WSUS Experte
*****
Offline


I Love WSUS!<br />

Beiträge: 702
Standort: Magdeburg
Mitglied seit: 24.07.08
Re: RebootRequired abfragen
Antwort #13 - 05.08.11 um 18:41:31
Beitrag drucken  
Hi lenny,

lenny schrieb on 28.07.11 um 09:52:49:
Kannst du mir sagen, was er mir mitteilen möchte?

"Diese Procedure existiert nicht => Schreibfehler!!!"

Hast Du das Script mit der Korrektur mal getestet? Ich bitte Dich nochmal um ein Feedback. Danke.

Gruß Dani
  
Zum Seitenanfang
 
lenny
WSUS Senior Member
***
Offline


I Love LDAP!

Beiträge: 190
Mitglied seit: 06.10.09
Geschlecht: männlich
Re: RebootRequired abfragen
Antwort #14 - 18.08.11 um 15:03:18
Beitrag drucken  
Hallo,

entschuldige das ich mich erst jetzt melde. Ich habe erst jetzt wieder Zeit gefunden...
habe das Ganze nun anderst gelöst...
Ist zwar Programmierung für Arme aber ich wollte dann doch irgendwann fertig werden und Funktionalität geht über Optik  Zwinkernd

Mein Script mit 3 WSUS Servern sieht wie folgt aus....
Eine Auswertung nach Gruppen erfolgt nicht...

Code
[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | out-null

$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("WSUS1.Domain1.de",0);
$wsus1 = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("WSUS2.Domain2.de",0)
$wsus2 = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("WSUS3.Domain3.com",0)

Remove-Item W:\Something.txt
Remove-Item W:\Something1.txt
Start-Sleep -s 10
$file1 = "W:\Something.txt"
$file2 = "W:\Something1.txt"

$computerScope = new-object Microsoft.UpdateServices.Administration.ComputerTargetScope;
$computerScope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::InstalledPendingReboot;

$updateScope = new-object Microsoft.UpdateServices.Administration.UpdateScope;
$updateScope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates]::InstalledPendingReboot;


$collection1 = $wsus.GetComputerTargets($computerScope);
$collection2 = $wsus1.GetComputerTargets($computerScope);
$collection3 = $wsus2.GetComputerTargets($computerScope);


$computers=$collection1+$collection2+$collection3


#hier können Rechner definiert werden die vom Neustart ausgeschlossen werden sollen.

$computers | foreach-object {
	$_.FullDomainName | foreach-object 	{
		if ($_ -eq 'Server.Domain1'){
		}

		elseif ($_ -eq 'Server1.Domain1'){
		}

		elseif ($_ -eq Server2.Domain1'){
		}

		elseif ($_ -eq 'Server3.Domain1'){
		}

		elseif ($_ -eq 'Server4.Domain2'){
		}

		elseif ($_ -eq 'Server5.Domain1'){
		}

		elseif ($_ -eq 'Server6.Domain1'){
		}

		elseif ($_ -eq 'Server7.Domain1'){
		}

		elseif ($_ -eq 'Serverxyz.Domain1'){
		}

		else {


		#Dies sind also alle Rechner die einen Neustart benötigen und neugestartet werden dürfen!
		out-file -filepath $file1 -inputobject $_ -append -encoding default
		}
	}
}

#Sind die Rechner überhaupt erreichbar?
$file1 = get-content W:\something.txt
foreach ($Linie in $file1) {
	if ( Test-Connection $Linie -count 1 -quiet ){
				#ja sind Sie...
				#Hier stehen nun alle Online Rechner mit Reboot pending
				out-file -filepath W:\wsus\Clients_rebooted.txt -inputobject $Linie -append -encoding default
				#Reboot endlich :D
				restart-computer -computername $Linie -Force
	}

}

Start-Sleep -s 1800

# Sind die Rechner nach dem Reboot per Ping erreichbar?

$file2 = get-content W:\something1.txt
		foreach ($Linie2 in $file2) {
			if ( Test-Connection $Linie2 -count 1 -quiet ){

			# be happy... Everything is allright	:-)

			}

			else {
				# Mailbenachrichtigung im Fehlerfall
				function sendmail($body)
						{
						$SmtpClient = new-object system.net.mail.smtpClient
						$MailMessage = New-Object system.net.mail.mailmessage
						$SmtpClient.Host = "mail.Domain1.de"
						$mailmessage.from = "WSUS@Domain1.de"
						$mailmessage.To.add("edv@Domain1.de")
						$mailmessage.Subject = $Linie2 +' nach 30 min nicht online'
						$MailMessage.IsBodyHtml = $true
						$mailmessage.Body = $body
						$smtpclient.Send($mailmessage)
						}

						$body =  $Linie2 +' ist nicht via ping erreichbar. Bitte umgehend prüfen'
						sendmail $body
			}
		}

 



Danke Für Deine Hilfe, Script läuft bei mir jetzt produktiv... Mal schauen was kommt  Durchgedreht

Für einen Tag voller Langeweile habe ich noch wsus.GetChildServers gefunden. Aber das wollte auf Anhieb nicht funktionieren...

Grüße

Andreas

  
Zum Seitenanfang
 
Seitenindex umschalten Seiten: [1] 2 
Thema versendenDrucken
Bookmarks: Facebook Google Google+ Linked in Twitter Yahoo
 



Nutzungsbedingungen | Datenschutz
Kontakt | RSS | Feedback | Impressum
Facebook | News einsenden