我希望这不是一个普遍的问题,我目前在工作中遇到一个行为奇怪的任务。我们有一个应用程序(安装程序)运行一些蝙蝠文件。这里没什么奇怪的。现在我们想安装 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 Native Client 的虚拟机上运行它,它会输出“1”(真)
我正在运行的同一个 bat 是从我们的安装程序运行的(调用完全相同的 bat 文件)但现在它输出“0”(错误)
这让我觉得这与脚本的调用者有关,但我不知道是什么?有什么想法吗?