Benutzer mit den meisten Antworten
Windows Update script to check if security updates are available

Frage
-
Hey guys. I'm a Powershell Beginner and I'm working on a PowerShell script to automatically check every day if a security relevant updates/hotfixes for the Windows Servers of my company are available. If so the script should send an notification mail to a specific mail address with the number of the update as content.
I totally would need some help.
Here's what I've got so far:
$Hostname= env:computername
$Mailcontent = Get-WUList -title “security” OR “critical”
Get-WUList -title “security” OR “critical” | Send-MailMessage -From psalert@test.com -to tester.intest@test.com -Subject $Hostname - kritische Updates verfügbar -BodyI downloaded the module Windows Update PowerShell Module to make this work.
Well, it doesn't work. I get an error message already at the beginning, from env:computername. It somehow doesn't recognize the computername environment variable.
Can you please help me?
Kind regards
Antworten
-
Moin,
$ENV ist das Standardlaufwerk für Umgebungsvariablen, den kannst Du nicht umdefinieren. Nimm doch einfach wie vorgeschlagen $ENV:ComputerName
Ansonsten fehlen im Send-MailMessage-Aufruf noch Bindestriche, Anführungszeichen usw.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com- Bearbeitet Evgenij Smirnov Donnerstag, 23. Februar 2017 11:02
- Als Antwort markiert FlorianZurich1 Freitag, 24. Februar 2017 09:33
-
$ENV=ComputerName
$Mailcontent = Get-WUList -title "security" OR "critical" | Send-MailMessage -From psalert@test.ch to florian.tester@test.ch -Subject $ENV kritische Updates verfügbar$hostname = $env:COMPUTERNAME $Mailcontent = Get-WUList -title "security" OR "critical" | Send-MailMessage -From "psalert@test.ch" -To "florian.tester@test.ch" -Subject "$hostname kritische Updates verfuegbar"
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Als Antwort markiert FlorianZurich1 Freitag, 24. Februar 2017 09:33
-
So sollte es laufen:
Import-Module PSWindowsUpdate
$user = "Username" $password = "Password" | Convertto-SecureString -AsPlainText -Force $credentials = New-Object System.Management.Automation.Pscredential -Argumentlist $user,$password $hostname = $env:COMPUTERNAME $updatelist = @(Get-WUList -title "security";Get-WUList -title "critical") if ($updatelist) { Send-MailMessage -From "Absender" -To "Empfaenger" -Subject "$hostname kritische Updates verfuegbar" -SmtpServer "Mail-Server" -Port "Serverport" -Credential $credentials #optional -UseSsl }
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Als Antwort markiert FlorianZurich1 Freitag, 24. Februar 2017 09:33
- Bearbeitet SandroReiter Freitag, 24. Februar 2017 09:42
-
Es gibt keine Category Security (oder ich steh gerade total auf dem Schlauch bei dem Module). Also entweder über den Namen mit -Title oder Du filterst nach dem Updatetyp
get-wulist | Where-Object {$_.Type -like "1"}
Type = 1 sind bei mir die Updates für Silverlight und Windows Defender. Keine Ahnung ob das der Kategorie "Security" oder Einstufung "Critical" entspricht. Ich hab gerade keine Möglichkeit das nachzuprüfen.Eventuell findest Du aber mit
Get-WUList | Get-Member
noch ein anderes Property nachdem Du sinnvoll filtern kannst ob ein wichtiges Update am Server verfügbar ist.
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Bearbeitet SandroReiter Freitag, 24. Februar 2017 10:01
- Als Antwort markiert FlorianZurich1 Freitag, 24. Februar 2017 10:19
Alle Antworten
-
Als Erstes: Das hier ist das deutsche Powershell Forum - sprich ruhig deutsch mit uns. ;-)
Hey guys. I'm a Powershell Beginner and I'm working on a PowerShell script to automatically check every day if a security relevant updates/hotfixes for the Windows Servers of my company are available. If so the script should send an notification mail to a specific mail address with the number of the update as content.
$Hostname= env:computername
Grüße - Best regards
PS:> (79,108,97,102|%{[char]$_})-join''- Bearbeitet BOfH-666 Mittwoch, 22. Februar 2017 16:24
-
warum? ... es gibt einen festen Termin dafür - den Microsoft Patch Day!!
naja... aber nach dem MS Patchday (und der dringend empfohlenen Testphase ;-) ) kommen noch mindestens zwei Instanzen:
- Patch Management, das die Updates für den jeweiligen Server im WSUS freigibt
- Server Management (der jeweiligen Applikation), das für die Applikation eine Wartung ankündigt, Updates installiert und die Maschinen bootet.
Und darum, diese letzte Instanz zu überwachen, dürfte es Florian hierbei gehen. Habe ich auch regelmäßig.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com -
naja... aber nach dem MS Patchday (und der dringend empfohlenen Testphase ;-) ) kommen noch mindestens zwei Instanzen:
Grüße - Best regards
PS:> (79,108,97,102|%{[char]$_})-join'' -
Hallo zusammen
Ist gut, dann schreib ich ab jetzt Deutsch.
Erst mal danke für die raschen Antworten. Mein Chef möchte dieses Skript, um auch über "ausserplanmässige", sicherheitskritische Updates schnellstmöglich informiert zu sein, falls z.B. eine Sicherheitslücke schnell geschlossen werden muss.
Ich probiers gleich mal ohne noch eine zusätzliche Variable zu definieren.
-
Also, das Skript bis jetzt:
$ENV=ComputerName
$Mailcontent = Get-WUList -title "security" OR "critical" | Send-MailMessage -From psalert@test.ch to florian.tester@test.ch -Subject $ENV kritische Updates verfügbarAls Fehlermeldung kommt:
Missing expression after unary operator '-'.
At C:\Users\Flo\Desktop\PowershellWindowsUpdate.ps1:3 char:2
+ - <<<< Subject $ENV kritische Updates verfügbar
+ CategoryInfo : ParserError: (-:String) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingExpressionAfterOperatorEs scheint, dass PS ein Problem mit dem - bei -Subject hat, dies müsste jedoch korrekt sein gemäss Syntax von Send-MailMessage. Weiss da jemand was?
Vielen Dank für eure Hilfe.
LG
Florian
-
Moin,
$ENV ist das Standardlaufwerk für Umgebungsvariablen, den kannst Du nicht umdefinieren. Nimm doch einfach wie vorgeschlagen $ENV:ComputerName
Ansonsten fehlen im Send-MailMessage-Aufruf noch Bindestriche, Anführungszeichen usw.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com- Bearbeitet Evgenij Smirnov Donnerstag, 23. Februar 2017 11:02
- Als Antwort markiert FlorianZurich1 Freitag, 24. Februar 2017 09:33
-
$ENV=ComputerName
$Mailcontent = Get-WUList -title "security" OR "critical" | Send-MailMessage -From psalert@test.ch to florian.tester@test.ch -Subject $ENV kritische Updates verfügbar$hostname = $env:COMPUTERNAME $Mailcontent = Get-WUList -title "security" OR "critical" | Send-MailMessage -From "psalert@test.ch" -To "florian.tester@test.ch" -Subject "$hostname kritische Updates verfuegbar"
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Als Antwort markiert FlorianZurich1 Freitag, 24. Februar 2017 09:33
-
$ENV=ComputerName
$Mailcontent = Get-WUList -title "security" OR "critical" | Send-MailMessage -From psalert@test.ch to florian.tester@test.ch -Subject $ENV kritische Updates verfügbar$hostname = $env:COMPUTERNAME $Mailcontent = Get-WUList -title "security" OR "critical" | Send-MailMessage -From "psalert@test.ch" -To "florian.tester@test.ch" -Subject "$hostname kritische Updates verfuegbar"
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
Naja, die Pipe ist auch recht zweifelhaft ;-)Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com -
So sollte es laufen:
Import-Module PSWindowsUpdate
$user = "Username" $password = "Password" | Convertto-SecureString -AsPlainText -Force $credentials = New-Object System.Management.Automation.Pscredential -Argumentlist $user,$password $hostname = $env:COMPUTERNAME $updatelist = @(Get-WUList -title "security";Get-WUList -title "critical") if ($updatelist) { Send-MailMessage -From "Absender" -To "Empfaenger" -Subject "$hostname kritische Updates verfuegbar" -SmtpServer "Mail-Server" -Port "Serverport" -Credential $credentials #optional -UseSsl }
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Als Antwort markiert FlorianZurich1 Freitag, 24. Februar 2017 09:33
- Bearbeitet SandroReiter Freitag, 24. Februar 2017 09:42
-
Hallo Florian,
ein Hinweis noch. Mit Get-WUList -Title "" filterst Du nach dem Updatetitel, nicht nach der Kategorie!
Für Sicherheitsupdates musst Du also je nach verwendeter Windows-Sprache nach "security" bzw"sicherheit" suchen. Ansonsten wirst Du nie ein Update angezeigt bekommen ;)
Markiere die hilfreichen Antworten doch bitte noch als solche mit einem Klick auf "Abstimmen" und Lösung(en) mit einem Klick auf "Als Antwort markieren".
Danke!
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
-
Hallo Sandro
Ist gut, hab ich gemacht.
Also würdest du mir eher was in die Richtung von
Get-WUList -Category "Security"
empfehlen für meinen Use Case?
Ich geb euch noch Bescheid, wie es gelaufen ist mit Testen, sobald ich dazu komme.
Liebe Grüsse
Florian
-
Es gibt keine Category Security (oder ich steh gerade total auf dem Schlauch bei dem Module). Also entweder über den Namen mit -Title oder Du filterst nach dem Updatetyp
get-wulist | Where-Object {$_.Type -like "1"}
Type = 1 sind bei mir die Updates für Silverlight und Windows Defender. Keine Ahnung ob das der Kategorie "Security" oder Einstufung "Critical" entspricht. Ich hab gerade keine Möglichkeit das nachzuprüfen.Eventuell findest Du aber mit
Get-WUList | Get-Member
noch ein anderes Property nachdem Du sinnvoll filtern kannst ob ein wichtiges Update am Server verfügbar ist.
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Bearbeitet SandroReiter Freitag, 24. Februar 2017 10:01
- Als Antwort markiert FlorianZurich1 Freitag, 24. Februar 2017 10:19