Powershell Datum der zuletzt eingespielten Patche bei remote Servern ermitteln
Hallo,
ich möchte gerne anhand einer Serverliste (bsp. computers.txt) via PS ermitteln,
wann derjeweilige Server zuletzt gepatcht wurde (Liste der installierten Patche sind nicht wichtig).
Wie bekomme ich das möglichst einfach mit Powershell-Mitteln hin?
Würde das Skript gerne mit privilegierten Rechten starten (Domänen-Admin), wie bekomme ich das ins Skript eingebaut?
Danke für Eure Tipps!
Gruß,
der Benson
ich möchte gerne anhand einer Serverliste (bsp. computers.txt) via PS ermitteln,
wann derjeweilige Server zuletzt gepatcht wurde (Liste der installierten Patche sind nicht wichtig).
Wie bekomme ich das möglichst einfach mit Powershell-Mitteln hin?
Würde das Skript gerne mit privilegierten Rechten starten (Domänen-Admin), wie bekomme ich das ins Skript eingebaut?
Danke für Eure Tipps!
Gruß,
der Benson
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 453762
Url: https://administrator.de/forum/powershell-datum-der-zuletzt-eingespielten-patche-bei-remote-servern-ermitteln-453762.html
Ausgedruckt am: 23.12.2024 um 09:12 Uhr
18 Kommentare
Neuester Kommentar
Hallo,
Gruß,
Peter
Zitat von @bensonhedges:
wann derjeweilige Server zuletzt gepatcht wurde (Liste der installierten Patche sind nicht wichtig).
Das wird dir nicht zwingend weiterhelfen, aber wenn eine Maschine 6 Monate in der Ecke stand und sich jetzt ein Patch ausm letzten Jahr zog, ohne das du weisste welches Update es war, kannst du nur davon ausgehen das der Rechner Kontakt mit seinen Elter hatte.wann derjeweilige Server zuletzt gepatcht wurde (Liste der installierten Patche sind nicht wichtig).
Gruß,
Peter
Hallo,
Gruß,
Peter
Zitat von @bensonhedges:
Stimmt, da hast Du recht. Dann wäre es sinnvoll, per Skript zu ermitteln, welches das letzte erfolgreich installierte Update war.
https://community.spiceworks.com/topic/1965305-get-windows-updates-last- ...Stimmt, da hast Du recht. Dann wäre es sinnvoll, per Skript zu ermitteln, welches das letzte erfolgreich installierte Update war.
Gruß,
Peter
Hola,
Lass doch mal das InstalledOn ganz weg. Es gibt auch Updates die keinerlei Datum haben.
Besten Gruß,
Spanish
Lass doch mal das InstalledOn ganz weg. Es gibt auch Updates die keinerlei Datum haben.
Besten Gruß,
Spanish
Hola,
In Zeile:1 Zeichen:125
bekommst. Ich bin aber nicht der Powershellexperte.
Besten Gruß,
Spanish
Zitat von @bensonhedges:
das bringt mir leider nichts, da ich ermitteln möchte, _wann_ das letzte Update auf dem jeweiligen Server
Ich meinte ja auch nur weil du unter anderemdas bringt mir leider nichts, da ich ermitteln möchte, _wann_ das letzte Update auf dem jeweiligen Server
sort : Ausnahme beim Abrufen von "InstalledOn": "Ausnahme beim Aufrufen von "Parse" mit 1 Argument(en): "Die Zeichenfolge wurde nicht als gültiges DateTime erkannt.""
bekommst. Ich bin aber nicht der Powershellexperte.
Besten Gruß,
Spanish
Hallo,
Ansonsten hilft auch Meister Google-Hupf
Nur das Datum:
Gruß, Sascha
gc c:\temp\computers.txt | ?{$_ -AND (Test-Connection $_ -Quiet)} | %{(Get-Hotfix -computername $_ | Sort InstalledOn -Descending)} >> C:\temp\file.txt
Ansonsten hilft auch Meister Google-Hupf
Nur das Datum:
(Get-Hotfix | Sort InstalledOn -Descending).InstalledOn
Gruß, Sascha
Hallo @bensonhedges
das Einlesen von Dateien ist über Get-Content (kurz gc) möglich. Dann wird das Ganze noch etwas umgestellt (Function entfernt) und mit einem hübschen Schleifchen drum herum versehen und schon initiiert diese über alle Computernamen welche sich in der Textdatei befinden.
Gruß, Sascha
das Einlesen von Dateien ist über Get-Content (kurz gc) möglich.
$computers = gc D:\temp\hostname.txt
foreach ($computer in $computers){
$key = “SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install”
$keytype = [Microsoft.Win32.RegistryHive]::LocalMachine
$RemoteBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$computer)
$regKey = $RemoteBase.OpenSubKey($key)
$KeyValue = $regkey.GetValue(”LastSuccessTime”)
$System = (Get-Date -Format "yyyy-MM-dd hh:mm:ss")
if ($KeyValue -lt $System)
{
Write-Host $computer " - " $KeyValue
}
}
Gruß, Sascha
Ich kann dir hier nur zur einer Inventarisierungslösung wie lansweeper raten.
Damit bekommt ihr alle Maschinen auch wirklich in den Report. Mit SQL könnt ihr euch
Custom Reports bauen. Hab dazu mal was zu Windows updates geschrieben:
Vielleicht macht es dir das leichter.
https://www.protoncode.de/lansweeper-report-windows-updates/
Nein, ich bekomme von Lansweeper keine Provision ^^
Damit bekommt ihr alle Maschinen auch wirklich in den Report. Mit SQL könnt ihr euch
Custom Reports bauen. Hab dazu mal was zu Windows updates geschrieben:
Vielleicht macht es dir das leichter.
https://www.protoncode.de/lansweeper-report-windows-updates/
Nein, ich bekomme von Lansweeper keine Provision ^^
Ist $regkey initialisiert? Wenn $regkey keinen Wert hat (NULL) gibts diesen Fehler.
Also ich bin mal her gegangen und hab eine Workstation in hostname.txt gelegt und bin zeile für zeile durchgegangen:
$computers = gc C:\temp\hostname.txt
#Hier spare ich mir deine Schleife und versuche das ganze mit dem ersten Objekt aus Computers
$computer = $computers;
$key = "SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install"
$keytype = [Microsoft.Win32.RegistryHive]::LocalMachine
$RemoteBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$computer)
und dann kommt die erste Exception bei mir:
Ausnahme beim Aufrufen von "OpenRemoteBaseKey" mit 2 Argument(en): "Der Netzwerkpfad wurde nicht gefunden.
"
In Zeile:1 Zeichen:1
+ FullyQualifiedErrorId : IOException
Danach hat $regkey einen NULL Wert weil $RemoteBase nichts zurückgibt. Musst mal schauen wo es in dieser Zeile hängt.
Die NULL-Reference Exception scheint ein folgefehler zu sein
$computers = gc C:\temp\hostname.txt
#Hier spare ich mir deine Schleife und versuche das ganze mit dem ersten Objekt aus Computers
$computer = $computers;
$key = "SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install"
$keytype = [Microsoft.Win32.RegistryHive]::LocalMachine
$RemoteBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$computer)
und dann kommt die erste Exception bei mir:
Ausnahme beim Aufrufen von "OpenRemoteBaseKey" mit 2 Argument(en): "Der Netzwerkpfad wurde nicht gefunden.
"
In Zeile:1 Zeichen:1
$RemoteBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keyty ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ( , MethodInvocationException+ FullyQualifiedErrorId : IOException
Danach hat $regkey einen NULL Wert weil $RemoteBase nichts zurückgibt. Musst mal schauen wo es in dieser Zeile hängt.
Die NULL-Reference Exception scheint ein folgefehler zu sein