macleod
Goto Top

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

Content-ID: 671586

Url: https://administrator.de/forum/powershell-unterstuetzung-671586.html

Ausgedruckt am: 28.03.2025 um 08:03 Uhr

kpunkt
Lösung kpunkt 24.02.2025 um 12:50:43 Uhr
Goto Top
Zwei KI-Scripts (da ja Testumgebung vorhanden ist):

# 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.