
我希望這不是一般問題,我目前的工作任務有一個奇怪的行為。我們有一個應用程式(安裝人員)運行一些蝙蝠文件。這裡沒什麼奇怪的。現在我們想要安裝 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」(true)
我正在運行的同一個bat是從我們的安裝程式運行的(調用相同的bat檔),但現在它輸出“0”(假)
這讓我覺得與腳本的呼叫者有關,但我不知道是什麼?有任何想法嗎?