どうもミツシマです。

今回はMicrosoft 365アプリケーション(Office365アプリ??)をADのGPO スタートアップスクリプトを使用してインストール・展開する方法を検証してみました。


検証環境は以下のとおりです。
サーバーOS:Windows Server 2016
クライアントOS:Windows 10 Pro x64 2004
クライアントOS:Windows 10 Pro x86 1909

参考にしたサイト(文書)としては以下となります。
P94~が該当箇所となります。


〜検証〜

全体的な流れとしては以下となります。

  1. Office365 プログラムを準備する(「setup.exe」・「xmlファイル」・「Officeフォルダ」等)
  2. Office365プログラムとログを配置する共有フォルダを準備する
  3. スタートアップスクリプトで実行するbatファイルを作成する
  4. GPOを設定する
  5. 展開する



1.Office365 プログラムを準備する(「setup.exe」・「xmlファイル」・「Officeフォルダ」等)

以下のサイトも参考にどうぞ
ボリュームライセンス版のOffice2019をインストールしてみた
※「Deployments Tools」の簡単な使い方を載せています。


まずはOffice365プログラムを準備するところから。
今回は例にならってOffice365ProPlus(半期チャネル)をインストールしたいと思います。
そのために準備したxmlファイルは以下の通りです。

Microsoft365E-Apps.full.xml(インストールする際)
<Configuration ID="18dfa0f2-3c79-4c9d-9ab6-66c17d0359f5">
  <!-- Add OfficeClientEdition="32" Channel="SemiAnnual" -->
  <Add OfficeClientEdition="32" Channel="SemiAnnual" SourcePath="\\10.10.10.20\OfficeSetup$\Program" AllowCdnFallback="FALSE">
    <Product ID="O365ProPlusRetail">
      <Language ID="ja-jp" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="Lync" />
    </Product>
  </Add>
  <Property Name="FORCEAPPSHUTDOWN" Value="FALSE" />
  <AppSettings>
    <Setup Name="Company" Value="Test.Inc" />
  </AppSettings>
  <Display Level="Full" AcceptEULA="TRUE" />
</Configuration>


Microsoft365E-Apps.full.xml(ダウンロードする際)
<Configuration ID="18dfa0f2-3c79-4c9d-9ab6-66c17d0359f5">
  <Add OfficeClientEdition="32" Channel="SemiAnnual">
  <!-- Add OfficeClientEdition="32" Channel="SemiAnnual" SourcePath="\\10.10.10.20\OfficeSetup$\Program" AllowCdnFallback="FALSE" -->
    <Product ID="O365ProPlusRetail">
      <Language ID="ja-jp" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="Lync" />
    </Product>
  </Add>
  <Property Name="FORCEAPPSHUTDOWN" Value="FALSE" />
  <AppSettings>
    <Setup Name="Company" Value="Test.Inc" />
  </AppSettings>
  <Display Level="Full" AcceptEULA="TRUE" />
</Configuration>

上記2つのファイルの違いとしては、「SourcePath」の指定があるかどうかです。
ダウンロードする際はインターネット上からファイルを取得する必要があるので「SourcePath」の記載をなくしたものが必要です。
(注)「SourcePath」を指定したままだと失敗します!

SourcePath」は「setup.exe」・「Officeフォルダ」・「xmlファイル」を配置するパスを記述してください。
※後述する「Office365プログラムとログを配置する共有フォルダを準備する」に合わせる形が必要です。

また、Microsoftのガイドと違い「Display Level="Full"」としていますが、それはインストール状況をわかりやすくするためです(この設定でもサイレントインストールされますので、ご安心ください!)

正常に「Office」フォルダが生成出来ましたら本手順は終了で、共有フォルダの作成に移ります。


2.Office365プログラムとログを配置する共有フォルダを準備する

今回は検証を簡略化する意味でDC上に「OfficeSetup$」という隠し共有フォルダを作成しています。
共有アクセス権は「Everyone」フルコントール、NTFS権限で「Domain Users」に変更権限を追加します。
その中に「Logs」フォルダと「Program」フォルダを作成しています。
Logs」フォルダはbat実行時のログを出力する場所となります。
Program」フォルダに「setup.exe」・「Officeフォルダ」・「xmlファイル(インストール用)」を配置します。
フォルダ構成
フォルダ構成2


以上で共有フォルダの準備は完了です。


3.スタートアップスクリプトで実行するbatファイルを作成する

今回の肝となる部分です!!!
↓↓とりあえず完成したbatファイルがこちら↓↓

Office365Install.startup.bat
@echo off
setlocal

REM *********************************************************************
REM Environment customization begins here. Modify variables below.
REM *********************************************************************

REM Get ProductName from the Office product's core Setup.xml file, and then add "office15." as a prefix.
set ProductName="O365ProPlusRetail - ja-jp"

REM Set DeployServer to a network-accessible location containing the Office source files.
set DeployServer=¥¥10.10.10.20¥OfficeSetup$¥Program

REM Set ConfigFile to the configuration file to be used for deployment (required)
set ConfigFile=%DeployServer%¥Microsoft365E-Apps.full.xml

REM Set LogLocation to a central directory to collect log files.
set LogLocation=¥¥10.10.10.20¥OfficeSetup$¥Logs

REM Set DomaiName & UserName & PW
set DomainName=MITSU
set NetUserName=test01
set NetUserPW=Password

REM net use
net use %DeployServer% /user:%DomainName%¥%NetUserName% %NetUserPW%

REM *********************************************************************
REM Deployment code begins here. Do not modify anything below this line.
REM *********************************************************************

IF NOT "%ProgramFiles(x86)%"=="" (goto ARP86)

REM Operating system is X64. Check for 32 bit Office in emulated Wow6432 uninstall key
:ARP64
reg query HKEY_LOCAL_MACHINE¥SOFTWARE¥WOW6432NODE¥Microsoft¥Windows¥CurrentVersion¥Uninstall¥¥%ProductName%
if NOT %errorlevel%==1 (goto End)

REM Check for 32 and 64 bit versions of Office 2010 in regular uninstall key.(Office 64bit would alsoappear here on a 64bit OS)
:ARP86
reg query HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Uninstall¥¥%ProductName%
if %errorlevel%==1 (goto DeployOffice) else (goto End)

REM If 1 returned, the product was not found. Run setup here.
:DeployOffice
echo %date% %time% StartInstall. >> %LogLocation%¥%computername%.txt
cls
echo この画面は閉じずに何も操作しないでください.
echo 10分経過してもインストールが完了しない場合、背景をクリックしてログオン操作に入ってください.
echo 再度のお願いとなりますが、画面は閉じずにログオン操作をお願いします.バックグラウンドでインストール処理は継続されます.
REM start /wait %DeployServer%¥setup.exe /configure %ConfigFile%
%DeployServer%¥setup.exe /configure %ConfigFile%

echo %date% %time% Setup ended with error code %errorlevel%. >> %LogLocation%¥%computername%.txt

REM 完了したことをわかりやすくするために(Fin)をファイル名の頭に付与する
timeout /T 3 /NOBREAK
if %errorlevel%==0 (rename %LogLocation%¥%computername%.txt "(Fin)%computername%.txt")

cls
echo インストール処理が完了しました.Enterキーを押してこの画面を閉じてください.
pause

REM If 0 or other was returned, the product was found or another error occurred. Do nothing.
:End
Endlocal


解説します。
取り急ぎ変更する必要があるのは、赤字で記載がある項目です。
処理としては、「各種環境変数の設定」・「net useコマンドの実行」・「OSのbit数に応じてレジストリチェック(インストール有無の確認)」・「Office365アプリのインストール」・「ログファイルの出力

この中でMicrosoftのガイドと大きく違うところが「net useコマンドの実行」だと思います。
ご存知の方もいると思いますが、スタートアップスクリプトはローカル「SYSTEM権限」で実行されますので、ネットワーク上のファイルにそのままアクセスすることは出来ません。
その為に「Domain Users」権限で構いませんので適当なユーザーを用意します。
※共有フォルダがNTFS権限で「Everyone」変更とかになっていれば、本コマンドは不要ですが。。。

後は実際にインストールする画面を見せる為に各種「echo文」を書いています。

今回すごく勉強になったのが、32bitと64bitを区別する方法です。
%ProgramFiles(x86)%」という環境変数でも判断出来るんですね!!
今までは「%PROCESSOR_ARCHITECTURE%」でやっていたのですが、こっちでもいいですね!!!
またレジストリチェックするときにも「%errorlevel%」というのを使用していて、これも今後真似してみようと思った記述でした!!


ただし、Microsoftガイドに載っている箇所で絶対修正しないといけない箇所があります!
それが
「reg query HKEY_LOCAL_MACHINE¥SOFTWARE¥WOW6432NODE¥Microsoft¥Windows¥CurrentVersion¥Uninstall¥¥%ProductName%」
「reg query HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Uninstall¥¥%ProductName%」
赤字のように2つ重ねること!!

どういうことかというと、仮にガイドの通りに作成すると
環境変数展開後は以下のようなコマンドとなります。
「reg query HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Uninstall¥"O365ProPlusRetail - ja-jp"
これだとコマンドがエラーします。

スペースを含むキーを検索するのであれば通常は以下のようにします。
「reg query "HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Uninstall¥O365ProPlusRetail - ja-jp"
このようにしたいのですが、追記の処理をなるべくなら入れたくないです。

そうしてたどり着いたのが
「reg query HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Uninstall¥¥"O365ProPlusRetail - ja-jp"
クエリー結果

ホント謎すぎる。。。。orz

色々調べても理由がわからない(汗)
とりあえず、おまじないということでこれ以上は深くは考えないようにします。


話を戻しますが、こんな感じでインストールbatを作成します!


4.GPOを設定する

グループポリシーとしては以下の内容が必要となります。
  • スタートアップスクリプトへbatファイルを設定
  • 「コンピューターの構成」-「ポリシー」-「管理用テンプレート」-「システム」-「スクリプト」にて「グループポリシー スクリプトの最大待機時間を指定する」を設定
  • 「コンピューターの構成」-「ポリシー」-「管理用テンプレート」-「システム」-「スクリプト」にて「スタートアップスクリプトを非同期に実行する」を「無効」に設定
  • 「コンピューターの構成」-「ポリシー」-「管理用テンプレート」-「システム」-「スクリプト」にて「実行中のスタートアップスクリプトの命令を表示する」を「有効」に設定
ポリシー設定画面

「実行中のスタートアップスクリプトの命令を表示する」を「有効」にしても、そもそも非同期で実行されているものは表示されないので、「スタートアップスクリプトを非同期に実行する」も合わせて設定しています。

そして、bat処理が完了するまで処理を継続するために「グループポリシー スクリプトの最大待機時間を指定する」を「0」に設定しています。
※未構成だと「10分」でbat処理が中断されます。それだとログ出力に影響があるので、ここでは「0」にしています。本番だと「20」とか「30」が良いかもですが、今回は検証環境なので!


設定したGPOはすべて「コンピューターの構成」なので、コンピューターオブジェクトを格納しているOUにかけます! ※これ以外と大事!!


以上で設定は完了です。
後はPCを再起動したりすると、ログイン画面が表示される頃に展開されるはずです。


5.展開する

↓↓PC起動時のログオン画面で展開されて、こんな感じになります↓↓
インストール画面1
インストール画面2
インストール完了画面1
インストール完了画面2
※上記の感じで画面が表示されるのもxmlファイルで「Display Level="Full"」と指定しているからです。


↓↓出力されたログはこんな感じ↓

07-インストールログ

インストール済みの端末に対しては最初のチェックのみ走る感じになります。
その為、一瞬コマンドプロンプトの画面が表示されますが、すぐに閉じられる形となります。
また、インストール済みのOfficeをアンインストールすることもxmlファイルで指定可能なのでこれも合わせると展開が更に楽になるかもです。


今回はこんなところで検証終わりです。
実際にこれをやろうとするなら、夜間や休日にしかけてPCを一斉起動でインストールするのが現実的ですかね!?!?
(これを平日日中にやる勇気は僕にはないですね 笑笑)

色々と勉強になる検証でした(^o^)

スポンサードリンク