Powershell Unterstützung
Hallo zusammen,
ich bräuchte bitte etwas Unterstützung bei einer Aufgabe/Umsetzung in Powershell.
Auf Rechnersystemen Win10 22H2 sollen die Reste einer veralteten Branchensoftware entfernt werden. Dazu gehören Verknüpfungen, Programmverzeichnisse einige ocx Registrierungen und leider recht viele Reste in der Registry. Deinstallationstool oder Uninstall gibt es zu dem Tool keine. Alles machbar nur mit der Registry kämpfe ich.
Speziell in der Registry hinterlässt das Programm viele Keys unter anderem so etwas hier:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{FB506411-9A80-11D4-81CC-00C04F4EA87F}\1.0\HELPDIR]
@="\\\\Fileserver\\APPS\\Mistsoftware\\d\\d\\Program.exe"
Aufgabenstellung wäre ein Script, welche alle Typelib keys durchsucht und wenn unterhalb davon irgendwo der String
"\Fileserver\\APPS\\Mistsoftware\"
gefunden wird, den kompletten Typelib key zu löschen.
Könnte das jemand hier für mich zusammen klimpern, bitte? Script soll per remote ausgerollt werden braucht also kein verbose. VM zum testen wäre vorhanden.
Vielen Dank,
Macleod
ich bräuchte bitte etwas Unterstützung bei einer Aufgabe/Umsetzung in Powershell.
Auf Rechnersystemen Win10 22H2 sollen die Reste einer veralteten Branchensoftware entfernt werden. Dazu gehören Verknüpfungen, Programmverzeichnisse einige ocx Registrierungen und leider recht viele Reste in der Registry. Deinstallationstool oder Uninstall gibt es zu dem Tool keine. Alles machbar nur mit der Registry kämpfe ich.
Speziell in der Registry hinterlässt das Programm viele Keys unter anderem so etwas hier:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{FB506411-9A80-11D4-81CC-00C04F4EA87F}\1.0\HELPDIR]
@="\\\\Fileserver\\APPS\\Mistsoftware\\d\\d\\Program.exe"
Aufgabenstellung wäre ein Script, welche alle Typelib keys durchsucht und wenn unterhalb davon irgendwo der String
"\Fileserver\\APPS\\Mistsoftware\"
gefunden wird, den kompletten Typelib key zu löschen.
Könnte das jemand hier für mich zusammen klimpern, bitte? Script soll per remote ausgerollt werden braucht also kein verbose. VM zum testen wäre vorhanden.
Vielen Dank,
Macleod
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 671586
Url: https://administrator.de/forum/powershell-unterstuetzung-671586.html
Ausgedruckt am: 28.03.2025 um 08:03 Uhr
1 Kommentar
Zwei KI-Scripts (da ja Testumgebung vorhanden ist):
Gibt halt eine Rückmeldung, kann man aber auch rauslöschen.
Sehen beide auf den ersten Blick brauchbar aus.
Quelle: KI
# Definiere den Pfad zum Durchsuchen
$searchPath = "HKLM:\SOFTWARE\Classes\TypeLib\"
# Suche nach dem spezifischen String
$searchString = "\Fileserver\APPS\Mistsoftware\"
# Durchsuche die Registry nach dem String
$matchingKeys = Get-ChildItem -Path $searchPath -Recurse |
Get-ItemProperty |
Where-Object { $_.PSObject.Properties.Value -match [regex]::Escape($searchString) }
# Überprüfe, ob passende Schlüssel gefunden wurden
if ($matchingKeys) {
foreach ($key in $matchingKeys) {
$parentKey = Split-Path $key.PSPath -Parent
Write-Host "Gefundener Schlüssel: $parentKey"
# Lösche den kompletten Schlüssel
Remove-Item -Path $parentKey -Recurse -Force
Write-Host "Schlüssel wurde gelöscht."
}
} else {
Write-Host "Kein passender Schlüssel gefunden."
}
# Setze den Registry-Pfad
$registryPath = "HKLM:\SOFTWARE\Classes\TypeLib"
# Durchsuche alle Subkeys unterhalb von TypeLib
$subKeys = Get-ChildItem -Path $registryPath
# Flag, um festzustellen, ob der gewünschte String gefunden wurde
$found = $false
# Durchlaufe alle Subkeys und überprüfe deren Werte
foreach ($subKey in $subKeys) {
$values = Get-ItemProperty -Path $subKey.PSPath
foreach ($value in $values.PSObject.Properties) {
# Überprüfe, ob der Wert den gesuchten String enthält
if ($value.Value -like "*\Fileserver\\APPS\\Mistsoftware*") {
Write-Host "Gefundener String in: $($subKey.PSPath)"
$found = $true
break
}
}
if ($found) {
break
}
}
# Wenn der String gefunden wurde, lösche den gesamten Key
if ($found) {
Write-Host "Lösche den Schlüssel: $($subKey.PSPath)"
Remove-Item -Path $subKey.PSPath -Recurse -Force
} else {
Write-Host "Kein passender String gefunden."
}
Gibt halt eine Rückmeldung, kann man aber auch rauslöschen.
Sehen beide auf den ersten Blick brauchbar aus.