如何检测Microsoft Office版本名称?

如何检测Microsoft Office版本名称?

通过编程,什么方法可以获取已安装的 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 编号方案的说明20162013201020072003经验值2000,然后读取DisplayNameKey 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

相关内容