
Ich hoffe, das ist kein allgemeines Problem. Ich habe derzeit eine Aufgabe bei der Arbeit, die ein seltsames Verhalten aufweist. Wir haben eine Anwendung (Installateur), die einigeSchlägerDateien. Nichts Ungewöhnliches hier. Nun möchten wir Sql Server Native installieren, falls es auf dem Rechner nicht existiert.
Deshalb haben wir ein Skript erstellt, das prüft, ob eine Software installiert ist oder nicht.
param ([Parameter(Mandatory)]$softwareName, $minimumVersion)
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize
[array]$matchingInstalledSoftware = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object {$_.DisplayName -Like $softwareName -and $_.VersionMajor -ge $minimumVersion}
return $matchingInstalledSoftware.Count
Wir rufen es so aus der Bat-Datei auf
powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File checkInstalledSoftware.ps1 -softwareName "Microsoft SQL Server 2012 Native Client*"'
Hier kommt also das Problem.
Wenn ich dies selbst auf einer VM ausführe, auf der der Microsoft SQL Server 2012 Native Client installiert ist, wird „1“ (true) ausgegeben.
Derselbe Bat, den ich ausführe, wird von unserem Installationsprogramm ausgeführt (ruft genau dieselbe Bat-Datei auf), aber jetzt gibt er „0“ (falsch) aus.
Das lässt mich vermuten, dass es etwas mit dem Aufrufer des Skripts zu tun hat, aber ich habe keine Ahnung, was es sein könnte. Irgendwelche Ideen?