Patze 10 Geschrieben 3. Mai 2012 Melden Teilen Geschrieben 3. Mai 2012 Hallo Leute, dies ist mein erster Beitrag, oder besser "erste Frage", hier im Forum. Ich arbeite im öffentlichen Dienst in der IT-Abteilung und versuche einige meiner Aufgaben mit der Powershell zu lösen. Das klappt mal mehr mal weniger und meine Literatur hilft mir auch nicht immer weiter. Anfangs (die ersten Jahre :D) werde ich wohl mehr Fragen müssen als Antworten können, hoffe aber, dass sich das schnell ändern wird. Jetzt geht es los ;) Ich durchsuche mit einem Script die Registrierung und will mit vielen IFs später viele Prozesse beenden und anschließend mit dem UnInstallString Software deinstallieren. Mit meinem Script (aus dem Internet geliehen) bekomme ich genau das angezeigt, was ich haben will. Ich weiß aber nicht wie ich das an eine oder mehrere Variablen übergeben kann. Mit einfachen Übergabemechanismen kenne ich mich schon aus, nur wie ich diese "Where-Object" oder "ForEach-Object" anzapfe weiß ich nicht. Zudem kann es passieren, dass mir mehrere Möglichkeiten angezeigt werden, aber dass will ich erst einmal ignorieren. Hier das Script, welches mir meine Infos liefert: Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{*" | Where-Object -FilterScript { $_.GetValue("DisplayName") -like "*sketchup*"} | ForEach-Object -Process {$_.GetValue("DisplayName"), $_.GetValue("UninstallString") } Hier das Script mit der nicht funktionierenden "Übergabeidee": Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{*" | Where-Object -FilterScript { $_.GetValue("DisplayName") -like "*sketchup*"} | ForEach-Object -Process {$_.GetValue("DisplayName"), $_.GetValue("UninstallString") } if ($_.GetValue("DisplayName") -eq "Google SketchUp 8") { "Treffer" } else { "Falsch" } Danke und Gruß an alle hier Pascal Zitieren Link zu diesem Kommentar
Dukel 455 Geschrieben 3. Mai 2012 Melden Teilen Geschrieben 3. Mai 2012 Was macht denn "-Process" bei "ForEach-Object" ? Wieso vergleichst du 2x (einmal in Get-Childitem mit dem Filter, einmal mit If)? Was meinst du mit einfachen Übergabemechanismen? Dem "="? Das kannst du bei deinem Code auch nutzen: $uninstall = "" Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{*" | Where-Object -FilterScript { $_.GetValue("DisplayName") -like "*sketchup*"} | ForEach-Object -Process { $uninstall = $_.GetValue("UninstallString") } $uninstall Zitieren Link zu diesem Kommentar
Patze 10 Geschrieben 3. Mai 2012 Autor Melden Teilen Geschrieben 3. Mai 2012 Hallo Dukel, Zu 1: Process ist wohl dafür, falls mehrere "sketchup"s installiert sind. Damit werden doch dann alle angezeigt, oder? Zumindest funktioniert es bei mir. Zu 2: Welches IF, dass im erweiterten Codebeispiel? Das hat sowieso nicht funktioniert. Zu 3: Ja, genau. Und jetzt habe ich auch die Lösung: $_P_DisplayName = Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{*" | Where-Object -FilterScript { $_.GetValue("DisplayName") -like "*sketchup*"} | ForEach-Object -Process {$_.GetValue("DisplayName"), $_.GetValue("UninstallString") } Ich hatte schon eine Variable, habe diese nur immer irgendwo und nicht am Anfang untergebracht. Nun kann ich mit write-output $_P_DisplayName[1] mir z.B. den zweiten Eintrag in meiner Variable ausgeben lassen. Das hatte ich gesucht und von einem neuen Arbeitskollegen gerade zeigen lassen. Der schein die PS ein wenig zu beherschen. Ich hoffe auch andere können dies gebrauchen. Gruß Pascal Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.