Microsoft Officeバージョン名を検出する方法


1

プログラム的に、インストールされている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 / elseif / elseifステートメントの束よりも簡単な方法論を持っていることを望んでいます。



その方法論は、Officeバージョンの「年」のみを返します。前述のように、「Office 2016 Professional Plus」や「Office 365 Business(2016)」などの製品をさらに決定する必要があります。
-Beems

superuser.com/questions/1097079/... ...しかし、それはライセンスのバージョンがインストールされているあなたを教えてdoesntの、かなり固体と思われるこのスクリプトを

私はそれを見ました。残念ながら、「Office 2016 Professional Plus」と「Office 365 Business(2016)」の違いは判断できません。この質問が却下されたので、Powershellで完全に新しい検出スクリプトを書くことを余儀なくされました。これは、特定の名前付きバージョンを取得するために数十種類の異なるメカニズムを必要とします。
-Beems

回答:


2

レジストリにインストールされているMicrosoft Officeの名前を見つけることができます。プロセスは、次の手順に従って自動化できます。


32ビットバージョンのレジストリキーを確認します
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
。64ビットバージョンの場合:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

キーはOfficeの製品コードGUIDの番号付けのしくみあたりとして、プロダクトIDのパターンのいずれかと一致する場合は20162013201020072003XP2000、そして読んでDisplayName実際にインストールの名前でキー値を、オフィス。

また、堅牢なOffice Inventory Scan Tool(ROISCAN)を見つけました。これは、インストールされているMicrosoft Officeのバージョンを完全に検索します。


1
ありがとう!Office GUIDがランダム化されていないことに気付きませんでした。これは間違いなく検出に役立ちます。
-Beems

1

これを試して:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.