PowerShell: Erfassen und Übernehmen von Array-Elementen
Hallo.
Ich überarbeite und erweitere gerade ein PowerShell-Skript eines Kollegen.
Das komplette Skript liest aus einer Excel-Datei PDF-Dateien anhand von Links ein und erstellt mit Ghostscript ein komplettes PDF-Dokument.
Das funktioniert alles.
Da dieses Skript bei verschiedenen Anwendern zum Einsatz kommt, sind unter Umständen auch die Versionen von Ghostscript unterschiedlich.
Der Pfad zu Ghostscript unterscheidet sich demnach ebenfalls.
Der Pfad zu Ghostscript wird im Gesamt-Skript verwendet.
Nun bin ich dabei ein Teil-Skript zu erstellen, dass die Version von Ghostscript ermitteln soll und ggf. die aktuellere Version installiert.
Ich kann auch damit leben, dass das Skript den Pfad zur unterschiedlichen Version anpasst.
Womit ich aber ein Verständnisproblem habe:
Wie bekomme ich die Version von Ghostscript übernommen?
An den Zeilen und Spalten im Array kann ich mich ja schlecht orientieren, da es bei jedem Anwender unterschiedlich sein kann.
Ich bin den Weg über eine Text-Datei gegangen, in die ich die installierten Programme schreiben lasse.
Was ich bis jetzt habe:
Ich habe unzählige Webseiten mit Powershell aufgesucht.
Keine konnte MIR verständlich erklären, wie ich den Wert der "DisplayVersion" übernehmen kann.
Oder hab ich hier ein Brett vorm Kopf, dass ich die Lösung nicht sehe?
Gruß
Daniel
P.S.: Bitte erstmal nur einen Tipp abgeben und nicht die komplette Lösung liefern. Ich will ja was lernen.
Ich überarbeite und erweitere gerade ein PowerShell-Skript eines Kollegen.
Das komplette Skript liest aus einer Excel-Datei PDF-Dateien anhand von Links ein und erstellt mit Ghostscript ein komplettes PDF-Dokument.
Das funktioniert alles.
Da dieses Skript bei verschiedenen Anwendern zum Einsatz kommt, sind unter Umständen auch die Versionen von Ghostscript unterschiedlich.
Der Pfad zu Ghostscript unterscheidet sich demnach ebenfalls.
Der Pfad zu Ghostscript wird im Gesamt-Skript verwendet.
Nun bin ich dabei ein Teil-Skript zu erstellen, dass die Version von Ghostscript ermitteln soll und ggf. die aktuellere Version installiert.
Ich kann auch damit leben, dass das Skript den Pfad zur unterschiedlichen Version anpasst.
Womit ich aber ein Verständnisproblem habe:
Wie bekomme ich die Version von Ghostscript übernommen?
An den Zeilen und Spalten im Array kann ich mich ja schlecht orientieren, da es bei jedem Anwender unterschiedlich sein kann.
Ich bin den Weg über eine Text-Datei gegangen, in die ich die installierten Programme schreiben lasse.
Was ich bis jetzt habe:
<# Script zum Ermitteln, ob GhostScript installiert ist. #>
<# Host- und Computernamen ermitteln #>
$Benutzer = $env:USERNAME
$Hostname = $env:COMPUTERNAME
<# Software auslesen #>
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* | select DisplayName, DisplayVersion | out-File C:\temp\installierte_software.txt
<# Leerzeichen und Leerzeilen aus der Textdatei entfernen #>
(Get-Content -Path C:\temp\installierte_software.txt) | Where-Object -FilterScript {$_.Trim() -ne '' } | Set-Content -Path C:\temp\installierte_software.txt
<# Array anlegen #>
$SoftwareArray1 =@(Get-Content "C:\temp\installierte_software.txt")
<# Inhalt des $SoftwareArray1 ausgeben #>
for ($i=0; $i -lt $SoftwareArray1.length; $i++)
{
Write-Host $SoftwareArray1[$i]
}
<# Textdatei nach Programm durchsuchen #>
Write-Host (" ")
for ($k=0; $k -lt $SoftwareArray1.length; $k++)
{
$SoftwareArray1[$k].Contains("GPL Ghostscript")
}
Ich habe unzählige Webseiten mit Powershell aufgesucht.
Keine konnte MIR verständlich erklären, wie ich den Wert der "DisplayVersion" übernehmen kann.
Oder hab ich hier ein Brett vorm Kopf, dass ich die Lösung nicht sehe?
Gruß
Daniel
P.S.: Bitte erstmal nur einen Tipp abgeben und nicht die komplette Lösung liefern. Ich will ja was lernen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1144217153
Url: https://administrator.de/contentid/1144217153
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
6 Kommentare
Neuester Kommentar
Oder hab ich hier ein Brett vorm Kopf, dass ich die Lösung nicht sehe?
Jo.Hol dir den Ghostscript Pfad gleich über den entsprechenden Registry-Pfad der Ghostscript DLL. Da du kein komplettes Script willst hier der Anfang den du ergänzen kannst
Get-ChildItem 'HKLM:\SOFTWARE\GPL Ghostscript' -Recurse | Get-ItemProperty -Name GS_DLL
Zum Thema installierte Software vollständig auslesen guckst du bspw. hier
Mit Powershell in der Reg. auslesen um den UninstallString zu bekommen
Zitat von @DanielG1974:
Das Problem mit den Uninstall-Pfaden in der Registry ist, dass dort nicht alle Anwendungen hinter einem Eintrag stecken.
32-Bit und 64-Bit Anwendungen sind unter Umständen in verschiedenen Registry-Pfaden hinterlegt.
Das Problem mit den Uninstall-Pfaden in der Registry ist, dass dort nicht alle Anwendungen hinter einem Eintrag stecken.
32-Bit und 64-Bit Anwendungen sind unter Umständen in verschiedenen Registry-Pfaden hinterlegt.
ich lese die installierte Software in meinen Skripten immer über
get-package | select name
Get-ChildItem -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall | Get-ItemProperty