Hallo werte Powershell Community,
ich bräuchte bitte mal ein wenig eure Hilfe, da ich seit fast zwei Wochen an einem Script sitze und es nicht so hinbekomme das es funktioniert.
Kurz zur Aufgabe die es erledigen soll:
Wir haben eine große Menge Rechner, die sich aufgrund vorangegangener Fehlinstallationen von WSUS Updates nicht mehr am WSUS melden bzw. die Updateinstallationen immer fehlschlagen.
Nun möchte ich ein PS Script erstellen, welches ich auf einem PC ausführe, es mir die Superseded Updates ausgibt und diese automatisiert deinstalliert. Ich habe bereits angefangen, komme aber an dem Punkt einfach nicht weiter, wo ich in die Schleife wechseln will. Ich habe verschiedene Konstrukte ausprobiert, foreach; foreach-object; while; usw. aber so richtig bekomme ich es nicht hin und da hoffe und bitte ich euch jetzt ganz lieb um eure Hilfe:
$source = "C:\superseded_updates.txt"
$update = Get-WindowsPackage -online | Where-Object { $_.Packagestate -eq "Superseded" } | Out-File -FilePath $source
(Get-Content $source | Select-Object -Skip 2) | ? {$_.trim() -ne "" } | Set-Content $source
$content = [System.IO.File]::ReadAllText($source)
$content = $content.Trim()
[System.IO.File]::WriteAllText($source, $content)
$read = Get-Content $source
#Schleifenblock
Remove-Item $source
Erzeugen tut das Script mir aktuell Dateien, die in etwa so aussehen:
PackageName : Microsoft-OneCore-ApplicationModel-Sync-Desktop-FOD-Package~31bf3856ad364e35~amd64~~10.0.18362.329
PackageState : Superseded
ReleaseType : OnDemandPack
InstallTime : 07.10.2019 02:59:00
PackageName : Microsoft-Windows-ActiveDirectory-DS-LDS-Tools-FoD-Package~31bf3856ad364e35~amd64~de-DE~10.0.18362.1
PackageState : Superseded
ReleaseType : OnDemandPack
InstallTime : 28.07.2021 08:47:00
PackageName : Microsoft-Windows-ActiveDirectory-DS-LDS-Tools-FoD-Package~31bf3856ad364e35~amd64~~10.0.18362.1
PackageState : Superseded
ReleaseType : OnDemandPack
InstallTime : 28.07.2021 08:47:00
PackageName : Microsoft-Windows-CertificateServices-Tools-FoD-Package~31bf3856ad364e35~amd64~~10.0.18362.1
PackageState : Superseded
ReleaseType : OnDemandPack
InstallTime : 28.07.2021 08:48:00
Mein Gedanke mit der Schleife war jetzt der, dass ich die Zeilen "PackageState, ReleaseType und InstallTime" vollständig mit .Trim() entferne, sodass nur noch die Zeilen mit "PackageName" in der Datei verbleiben. Im Anschluß daran wollte ich den Block "PackageName : " vor jeder Zeile abschneiden, damit nur der jeweilige Name des Updatepaketes verbleibt. Und als letzten Schritt wollte ich dann die Namen automatisiert auslesen und mit dem BefehlRemove-WindowsPackage -Online -PackageName "XYZ" etfernen lassen.
Evtl. ist das auch alles viel zu kompliziert wie ich mir das denke und ihr habt einen eleganteren und besseren Ansatz. Ich wäre euch für eure Hilfe sehr dankbar. Ich bin sehr neu in der Powershell Programmierung und tue mich daher noch sehr schwer damit.
Vielen Dank und Gruß
Sebi