通过编程,什么方法可以获取已安装的 Microsoft Office 版本的名称? 我尝试了所有能找到的 Powershell 命令、VBScript 和 WMI 查询。我仔细研究了注册表和文件系统,但还是找不到完美的方法来收集已安装的 Office 版本。
我能想到的最接近的方法是使用 WMIC 查询:
wmic product where "Name like '%Office%'" get name, version
不幸的是,这会返回不同的应用程序数组,即使经过更精细的过滤,它也无法告诉我“Office 16”是“Pro”、“Professional Plus”还是“Office365”。
否则,注册表值
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Scenario\INSTALL\ProductstoAdd
它至少存在于 2016 版中,但不存在于旧版本中。而且它本身不包含友好名称,因此需要进一步编写脚本才能将数据转换为ProPlusRetail.16_en-us_x-none
“Office 2016 Professional Plus”或O365BusinessRetail.16_en-us_x-none
“Office 365 Business (2016)”
我希望有人能有比大型脚本中的许多 if/else if/else if 语句更简单的方法。
答案1
您可以在注册表中找到已安装的 Microsoft Office 的名称。该过程可以按照以下步骤自动完成:
检查32 位版本的注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
对于 64 位版本:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
如果某个密钥与某个产品 ID 模式匹配,则按照 Office 中产品代码 GUID 编号方案的说明2016,2013,2010,2007,2003,经验值,2000,然后读取DisplayName
Key Value,其实就是已经安装的Office的名称。
我还发现强大的办公室库存扫描工具 (ROISCAN),对已安装的 Microsoft Office 版本进行相当全面的搜索。
答案2
作为一种可能的选择,尝试这个 Poswershell 查询:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\O365ProPlusRetail* | Select-Object DisplayName, DisplayVersion, Publisher
答案3
尝试这个:
setlocal enableDelayedExpansion
for /f "tokens=2 delims==" %%O in ('ftype ^|findstr /r /I "\\OFFICE[0-9]*" 2^>nul') do (
set "verp=%%~O"
goto :end_for
)
:end_for
for %%P in (%verp%) do (
set "off_path=%%~dpP"
for %%V in ("!off_path:~0,-1!") do (
set "office_version=%%~nV"
goto :end_for2
)
)
:end_for2
if [%office_version%] == [] echo No Office installed & goto end
echo %office_version%
:end
endlocal
答案4
我写了这个脚本,它基于 excel.exe 的版本。然后它从注册表中读取名称和版本。
$x32 = ${env:ProgramFiles(x86)} + "\Microsoft Office"
$x64 = $env:ProgramFiles + "\Microsoft Office"
$OK = $true
if (Test-Path -Path $x32) {$Excel32 = Get-ChildItem -Recurse -Path $x32 -Filter "EXCEL.EXE"}
if (Test-Path -Path $x64) {$Excel64 = Get-ChildItem -Recurse -Path $x64 -Filter "EXCEL.EXE"}
if ($Excel32) {$Excel = $Excel32}
if ($Excel64) {$Excel = $Excel64}
if ($Excel32 -and $Excel64) {"Error: x32 and x64 installation found." ; $Excel32.Fullname ; $Excel64.Fullname ; $OK = $false}
if ($Excel.Count -gt 1) {"Error: More than one Excel.exe found." ; $Excel.Fullname ; $OK = $false}
if ($Excel.Count -eq 0) {"Error: Excel.exe not found." ; $OK = $false}
if ($OK) {
$DisplayVersion = Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" -Name "DisplayVersion" -ErrorAction SilentlyContinue | Where-Object {$_.DisplayVersion -eq $Excel.VersionInfo.ProductVersion -and $_.PSChildName -notlike "{*}"}
$Office = Get-ItemProperty -Path $DisplayVersion.PSPath
$Office | ForEach-Object {"Product: " + $_.DisplayName + $(if ($_.InstallLocation -eq $x32) {", 32 Bit"} else {", 64 Bit"}) + ", Productversion: " + $_.PSChildName + ", Build: " + $_.DisplayVersion}
}
我在不同的系统上得到了这些输出。空行是各个输出之间的分隔符。
Product: Microsoft Office Professional Plus 2019 - de-de, 64 Bit, Productversion: ProPlus2019Retail - de-de, Build: 16.0.14430.20306
Product: Microsoft Office Professional Plus 2019 - de-de, 64 Bit, Productversion: ProPlus2019Volume - de-de, Build: 16.0.10379.20043
Product: Microsoft 365 Apps for Enterprise - de-de, 64 Bit, Productversion: O365ProPlusRetail - de-de, Build: 16.0.14430.20306
Product: Microsoft Office Professional Plus 2019 - de-de, 64 Bit, Productversion: ProPlus2019Volume - de-de, Build: 16.0.10379.20043
Product: Microsoft Office Profesional Plus 2019 - es-es, 64 Bit, Productversion: ProPlus2019Volume - es-es, Build: 16.0.10379.20043
Error: More than one Excel.exe found.
C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE
C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXE
Product: Microsoft Access Runtime 2016 - de-de, 32 Bit, Productversion: AccessRuntimeRetail - de-de, Build: 16.0.10379.20043
Product: Microsoft Office Standard 2019 - de-de, 32 Bit, Productversion: Standard2019Volume - de-de, Build: 16.0.10379.20043
Product: Microsoft Office Professional Plus 2019 - de-de, 32 Bit, Productversion: ProPlus2019Volume - de-de, Build: 16.0.10377.20023
Product: Microsoft Office Professional Plus 2019 - en-us.proof, 32 Bit, Productversion: ProPlus2019Volume - en-us.proof, Build: 16.0.10377.20023
Product: Microsoft Office Profesional Plus 2019 - es-es.proof, 32 Bit, Productversion: ProPlus2019Volume - es-es.proof, Build: 16.0.10377.20023
Product: Microsoft Office Professional Plus 2019 - it-it.proof, 32 Bit, Productversion: ProPlus2019Volume - it-it.proof, Build: 16.0.10377.20023