Normales Thema Rechner automatisiert Durchstarten (Bei Bedarf (Gelesen: 2345 mal)
lenny
WSUS Senior Member
***
Offline


I Love LDAP!

Beiträge: 190
Mitglied seit: 06.10.09
Geschlecht: männlich
Rechner automatisiert Durchstarten (Bei Bedarf
21.06.11 um 16:20:52
Beitrag drucken  
Hallo Kollegen,

mir war es bisher immer ein Dorn im Auge mitten in der Nacht und am Wochenende unsere Server rebooten zu müssen, weil sonst keine Wartungsfenster vorhanden sind. (und bei 20-30 Servern kann sich das ziehen...)

Ich habe mal ein kleines Powershellscript gebastelt, dass mir diese Arbeit (hoffentlich) abnimmt.
Ich bin leider kein Powershellguru... oder anderstgesagt, dies ist meine erste Berührung mit der Powershell... also vergebt mir unnütze Aufrufe und umständliche Lösungswege  Durchgedreht

Wer Verbesserungsvorschläge hat bitte immer her damit... Augenrollen

Momentan suche ich noch eine Möglichkeit, mehrere Domains und WSUS Server abzufragen... aktuell durchsucht er nur sich selbst.

Leider ist das Script auch nur direkt auf dem WSUS Server lauffähig.

Das Script wickelt folgendes ab.

1. Prüfen welche Rechner einen Neustart benötigen.
2. Ausschluss von Rechnern die ich nicht starten möchte
3. Prüfung ob die Rechner überhaupt online sind
4. Neustart Durchgedreht
5. Prüfung ob die Rechner wieder online sind.
6. Falls nicht eine Benachrichtigung per Mail.

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
Remove-Item W:\Wsus\Clients_rebooted.txt

$file1 = "W:\Wsus\Clients_reboot_needed.txt"
$file2 = "W:\Wsus\Clients_rebooted.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;

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

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

$computers | foreach-object {
	$_.FullDomainName | foreach-object 	{
		if ($_ -eq 'Server1.DOMAIN.de'){
		}

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

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

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

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

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

		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:\Wsus\Clients_reboot_needed.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
	}

}

Start-Sleep -s 1800

#Sind die Rechner nach dem Reboot per Ping erreichbar?

$file2 = get-content W:\Wsus\Clients_rebooted.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.DOMAIN.de"
						$mailmessage.from = "WSUS@DOMAIN.de"
						$mailmessage.To.add("MEIN.NAME@DOMAIN.de")
						$mailmessage.Subject = $Linie2 +'  nach 30min nicht online'
						$MailMessage.IsBodyHtml = $true
						$mailmessage.Body = $body
						$smtpclient.Send($mailmessage)
						}

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

 



Grüße und viel Spass damit

Lenny
  
Zum Seitenanfang
 
Sunny
Microsoft MVP
*****
Offline



Beiträge: 15134
Mitglied seit: 11.02.07
Geschlecht: männlich
Re: Rechner automatisiert Durchstarten (Bei Bedarf
Antwort #1 - 21.06.11 um 16:46:14
Beitrag drucken  
Wow, cooles Script, vielen Dank von meiner Seite. Zwinkernd
  
Zum Seitenanfang
 
DESoft
WSUS Experte
*****
Offline


I Love WSUS!<br />

Beiträge: 702
Standort: Magdeburg
Mitglied seit: 24.07.08
Re: Rechner automatisiert Durchstarten (Bei Bedarf
Antwort #2 - 17.07.11 um 11:16:59
Beitrag drucken  
Hi lenny,

lenny schrieb on 21.06.11 um 16:20:52:
Leider ist das Script auch nur direkt auf dem WSUS Server lauffähig.


Das liegt daran, dass das Assembly [Microsoft.UpdateServices.Administration] nicht standardisiert zum .NET gehört. Installier doch die WSUS-Konsole auf eine Wks. Dann wird das Assembly im GlobalCache registriert und Dein Script kann auch von dort aus laufen.
Voraussetzung ist min. eine Leseberechtigung auf dem WSUS-Server. Leider gibt es kein explizites LogOn im Sinne:

Code
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer($user, $pwd); 



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


I Love WSUS!<br />

Beiträge: 702
Standort: Magdeburg
Mitglied seit: 24.07.08
Re: Rechner automatisiert Durchstarten (Bei Bedarf
Antwort #3 - 19.07.11 um 00:48:22
Beitrag drucken  
Hi lenny,

siehe mal hier:    Zwinkernd

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

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


I Love LDAP!

Beiträge: 190
Mitglied seit: 06.10.09
Geschlecht: männlich
Re: Rechner automatisiert Durchstarten (Bei Bedarf
Antwort #4 - 25.07.11 um 14:41:30
Beitrag drucken  
Hallo,

danke für den Link... habe meinen alten Beitrag schon vergessen gehabt... ich werde es prüfen sobald es meine Zeit zulässt.

Grüße
  
Zum Seitenanfang
 
Bookmarks: Facebook Google Google+ Linked in Twitter Yahoo
 



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