2016-12-27 22 views
2

Der Versuch, die Deinstallationszeichenfolgen der Registrierung für bestimmte Software zu scannen, indem mit -match der Wert DisplayName gesucht wird. Ich kann es mit einem Stück Software arbeiten lassen, aber ich habe Probleme herauszufinden, wie man es mit einer Liste von Software zum Laufen bringt. Zum Beispiel setze ich Java, Silverlight, Shockwave, Adobe Reader und Adobe Font Pack als Variablen, kann aber nicht herausfinden, wie man sie durch den foreach Befehl führt.Schleife innerhalb einer Schleife?

$PATHS = @("HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall", 
      "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall") 

# Java 8 Update 102 | 8.0.1020.14 
$Javax86 = "Java 8" 

# Microsoft Silverlight | 5.1.50901.0 
$MSsilverlight = "Microsoft Silverlight" 

# Adobe Shockwave Player 12.2 | 12.2.5.195 
$AdobeShockwave = "Adobe Shockwave Player" 

# Extended Asian Language font pack for Adobe Acrobat Reader DC | 15.007.20033 
$AdobeReaderFont = "font pack for Adobe Acrobat Reader" 

# Adobe Acrobat Reader DC MUI | 15.020.20042 
$AdobeReader = "Adobe Acrobat Reader DC MUI" 

$SOFTWARE = "" 
#@($Javax86,$MSsilverlight,$AdobeShockwave,$AdobeReaderFont,$AdobeReader) 

foreach ($path in $PATHS) { 
    $installed = Get-ChildItem -Path $path | 
       foreach { Get-ItemProperty $_.PSPath } | 
       Where-Object { $_.DisplayName -match "$MSsilverlight" } | 
       Select-Object -Property DisplayName,DisplayVersion 

    foreach ($app in $installed) { 
     $DisplayName = "$($app.DisplayName)" 
     $DisplayVersion = "$($app.DisplayVersion)" 
    } 

    if ($app.DisplayName) { 
     $InstalledYes = "$DisplayName ($DisplayVersion) is installed" 
    } elseif ($app.DisplayName -eq $NULL) { 
     $InstalledNo = "$MSsilverlight is not Installed" 
     #Write-Host "$SOFTWARE is not installed" 
    } 
} 

Write-Host "$InstalledYes" 
Write-Host "$InstalledNo" 

Antwort

3

Wie Sie den -match Operator verwenden, könnten Sie die regex OR-Operator verwenden. Anstatt ein Array zu erstellen, verwenden Sie eine durch Trennzeichen getrennte Zeichenfolge:

$SOFTWARE = "$Javax86|$MSsilverlight|$AdobeShockwave|$AdobeReaderFont|$AdobeReader" 

ForEach ($path in $PATHS) { 

    $installed = Get-ChildItem -Path $path | 
       ForEach { Get-ItemProperty $_.PSPath } | 
       Where-Object { $_.DisplayName -match $SOFTWARE } | 
       Select-Object -Property DisplayName,DisplayVersion 

    ForEach ($app in $installed) { 
     $DisplayName = "$($app.DisplayName)" 
     $DisplayVersion = "$($app.DisplayVersion)" 

    } 

    .... 
+2

Sie benötigen keine Häkchen nach den Pipes. Bitte verwenden Sie keine Häkchen (je), um eine Linie fortzusetzen. –

Verwandte Themen