
Надеюсь, это не общая проблема, у меня сейчас есть задача на работе, которая ведет себя странно. У нас есть приложение (Установщик), которые управляют некоторымилетучая мышьфайлы. Ничего странного. Теперь мы хотели бы установить Sql Server Native на случай, если на машине его нет.
Поэтому мы создали скрипт, который проверяет, установлено ли программное обеспечение или нет.
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
Мы вызываем его вот так из bat-файла
powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File checkInstalledSoftware.ps1 -softwareName "Microsoft SQL Server 2012 Native Client*"'
Вот тут-то и возникает проблема.
Если я сам запущу это на виртуальной машине, на которой установлен собственный клиент Microsoft SQL Server 2012, то выведу «1» (true)
Тот же bat, который я запускаю, запускается из нашего установщика (вызывает тот же самый bat-файл), но теперь он выводит «0» (ложь)
Это заставляет меня думать, что что-то связано с вызывающим скриптом, но я понятия не имею, что именно? Есть идеи?