IntuneでWindows10にいろいろなものを配ってみる

# はじめに
最近の案件で、IntuneをiOSやAndroidだけでなく、Windows10の管理にも使うケースが増えています。
これによりActive Directoryや、SCCM、WSUSといったオンプレの資産を持たなくてもPC管理ができ、
さらにAutoPilotという機能を使えばキッティングも自動化出来、最近我々が一押しのシナリオです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/e76f1675-8de7-ec72-51e5-963a01cf18fd.png)

ただ実案件でこのご提案をする際に、よく問題となるのが、**Intuneで、今までのキッティングやイメージ運用手順でできていたことが全部できるのか**、という点です。これに関しては、コンセプトが異なることもあり、**100%の互換性があるわけではない**というのが回答です。



そんな時我々は、PCのクラウド管理への移行を機に、まずは今までの資産（**秘伝のタレ**と呼んでいます）を整理しましょう。というお話をさせて頂いています。
業務の場がオンプレミスのインフラ環境からクラウドサービスに移行しつつある中、デバイスの管理は**重厚長大なオンプレの仕組みでキメ細かく行う**のではなく、これを機に**シンプル化してでクラウドベースで実施**した方が良いのではないか、ということです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/9a16d64b-69af-d593-b755-996097455a76.png)


とはいえ、今までの資産を整理したとしても、**Intuneの標準機能で実現できないが、業務上どうしてもこれが必要**、というものがあるのも事実であり、実案件では**そんな要件を何とか実現しようと、あれこれ工夫して対応**しているのが実際のところです。
本稿ではこのようなケースにおける、**実案件で蓄積したノウハウ**をご紹介いたします。

# 標準機能でできること
まず、Intuneの標準機能でできることは以下の6点です。

- Office365 Apps for Enterprose (旧称 Office365 ProPlus) の配布
- Edge(Chromeium)の配布
- Microsoftストアアプリの配布
- 基幹業務アプリ(MSIパッケージ)の配布
- Win32アプリの配布（EXE形式のインストーラ）
- Powershellスクリプトの配布

これだけ見ると大抵のことはできそうですし、十分業務要件は満たせそうなのですが、**実際はそこまで甘くありません**。ほとんどの案件で、**これだけでは対応できない要件**がいくつか出てきます。

では、どうやってこのイレギュラーなパターンを対応するかというと、**Win32アプリの配布**機能を**本来の使い方とは少し違う形で使う**ことにより実現が可能です。


# Win32アプリの配布機能
この機能の使い方については、[公式ドキュメント](https://docs.microsoft.com/ja-jp/mem/intune/apps/apps-win32-app-management)や、[わかりやすい記事](https://azuread.net/2018/11/13/intune-exe-deployment1/)がありますので、本稿では割愛します。

まずこの機能の**本来の使い方**は、以下の通りです。

- インストーラーのファイル一式を、ツールを使い**intunewinファイル**にまとめる
- Itnunewinファイルを、**インストールを開始するコマンド**と併せてItnuneに登録
- Itnunewinファイルの中身がPCの一時フォルダに展開され、**インストールコマンドが実行**される

ただ、実はこの処理は以下の仕様となっており、**アプリのインストール以外の用途にも利用可能**となっています。
- Itnunewinファイルの中身は**インストーラーでなくてもいい**
- インストールコマンドは**インストーラーを起動しなければいけない、というわけではない**

つまり、Win32アプリの配布機能は、汎用的に以下のことが実行できます。
- 任意のファイル/フォルダをPCに移送
- 完了後、任意のコマンドを実行

これを利用すると**ほとんどの要件はIntuneで実現可能**となります。
それでは、実際の活用例を見ていきましょう。

# msiファイルを実行
まずご紹介したいのが、msiファイルの配布です。**MSIなら基幹業務アプリとして配布できるんじゃないの？**と思うかもしれませんが、以下の理由から、MSIファイルは**基幹業務アプリではなく、Win32アプリとして配布する**ことを推奨しています。

- 基幹業務アプリとして配布すると、**依存関係が使えない**
- そもそも**Win32アプリと基幹業務アプリを混在して配布することは非推奨**
- 詳細なインストールログが取得できない

それでは実際の手順を見ていきましょう。
例として、msi形式のインストーラが提供されている、7-ZipをWindows10に配布します。

- [公式サイト](https://ja.osdn.net/dl/sevenzip/7z1900.msi)からMSIファイルを取得し、作業フォルダに格納します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/d2444369-70be-3be4-fcf2-8a8d0c92415b.png)
- ツールを利用してIntunewinファイルに変換
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/92e62614-589b-8182-143b-6461d51685fc.png)


- IntuneでWin32アプリを新規作成し、Intunewinファイルをアップロード

- インストール コマンドの、`/q`を`/quiet`に修正
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/f9fba0a4-3845-a2e0-9a5c-e84b1fe30019.png)

- 必要条件を指定し、検出規則で、規則の種類＝「MSI」を指定し、製品コードを指定
（製品コードは、アンインストールコマンドに自動設定された値です。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/70fbb5b2-e550-9820-9d6a-647034c9e917.png)

- あとは必要であれば依存関係を指定し、デバイスに展開します。

# レジストリキーの配布
次にご紹介するのはレジストリキーをデバイスに配布する方法です。
こちらは.regファイルを配布し、直接実行するという手法で展開が可能です。

例として、**デスクトツプにコントロールパネルのアイコンを表示し、登録済みの拡張子を表示**するよう設定を変更してみます。

- まずは登録するRegファイルを用意し、作業フォルダに格納します。

```RegistryDistributionTest.reg
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel]
"{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
"HideFileExt"=dword:00000000

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/5c4e120e-a6d3-297b-f69c-6c544246d2b3.png)

- regファイルをツールを利用してIntunewinファイルに変換
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/7e5ac823-9531-8086-a5ec-0ffcf7c6c8cc.png)
- IntuneでWin32アプリを新規作成し、Intunewinファイルをアップロード

- インストール コマンドに、`regedit.exe /s (regファイル名).reg`を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/f983f337-a428-4a24-7b92-f20dcc6b93b5.png)
アンインストールコマンドは利用しないので、インストールコマンドと同じ内容でOKです。
ちなみにregedit.exeはintunewinファイルに含めていませんが、**配布するPCでパスが通っている実行ファイル**については、intunewinファイルに含めなくても問題ありません。

- 必要条件を指定し、検出規則で、規則の種類＝「レジストリ」を指定し、配布するレジストリの内容を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/513935ba-a6d3-471a-d10a-447d2ab2b7fd.png)



- あとは必要であれば依存関係を指定し、デバイスに展開します。


# スクリプトを実行
次にご紹介するのはスクリプトファイル（.bat、.cmdなど）をデバイス上で実行させる方法です。
これは以下の手順で実現できます。

・スクリプトファイルを単独でIntunewin形式に変換する
・インストール コマンドにスクリプトのファイル名を直接指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/f350498d-284b-8c92-36db-1940ea6f55be.png)
また、バッチファイル以外のものをIntunewinファイルに含めても構いません。
デバイス上でスクリプトが実行される前に、これらも同じ作業ディレクトリに展開されます。

同様にPowershellも実行可能です。この場合は以下のような形になります。
`powershell.exe -executionpolicy remotesigned -file "<スクリプトファイル名>.ps1"`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/e007f558-69cd-ba8d-040f-7d85d5911f0d.png)
Powershellも標準機能で配布できますが、この方法で配布することにより、依存関係や検出規則を利用できるほか、スクリプト以外のファイルを同時に配信できるメリットがあります。

# ファイルやフォルダをPCの任意の場所に配置
デスクトップにショートカットを置きたい、インストーラのないソフトを配布したい等の理由で、
用意したファイル・フォルダをPCのこのパスに配置したい、という要望もよくあります。

これはひとつ前の、「スクリプトを実行」をつかって少し工夫すれば実現可能です。
手順は以下の通りとなります。

-  配布したいファイル・フォルダをPC上にコピーするバッチファイルを作成

```java:FileCopy.bat
xcopy "Folder to transfer" "C:\temp\Folder to transfer" /E /I /H /R /Y
copy "File to transfer.txt" "C:\temp\File to transfer.txt" /Y
```
- 作成したバッチファイルと配布したいファイル/フォルダを作業フォルダに格納
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/00a03aa2-7a4f-a7ee-e832-cc831dc67631.png)
- 作業フォルダをツールを利用してIntunewinファイルに変換
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/bc5e149e-ee87-8e4b-d478-03ce8ee904d2.png)
- IntuneでWin32アプリを新規作成し、インストール コマンドにBatファイルの名前を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/221a4f13-d096-02e9-9944-9c5383f72316.png)
・検出規則で、規則の種類＝「ファイル」を指定し、配布するファイル・フォルダを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/b47feb5f-a6d7-956c-ff59-e10af0226aa8.png)
- あとは必要であれば依存関係を指定し、デバイスに展開します。

# フォントの配布
こちらはあまり需要がないかもしれないですが、実案件で要件がありましたのでご紹介します。
ひとつ前の、ファイルをPCの任意の場所に配置の応用編となります。

実はフォントの配布はフォントファイル（.ttfファイル）を格納フォルダ（C:\Windows\Fonts）にコピーすればよい、
というわけではなく、コピーした後にフォントの情報をレジストリに登録してあげる必要があります。
そのため、手順は以下の通りとなります。


- 配布したいフォントのファイル(.ttf)をC:\Windows\Fontsにコピーし、レジストリ登録するPowershellを作成

```installfont.ps1
Copy-Item -Path "$PSScriptRoot\outlook.ttf" -Destination "$env:windir\Fonts" -Force -PassThru -ErrorAction Stop
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" -Name "MS Outlook (TrueType)" -PropertyType String -Value "outlook.ttf" -Force
```
- 作成したPowershellとフォントファイルをIntunewin形式に変換する
- インストール コマンドに、`powershell.exe -executionpolicy remotesigned -file "installfont.ps1"` を指定
- 検出規則を以下の通り指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626626/90feab3a-fafa-a6cf-2510-d9ce0ec0ded9.png)
- あとは必要であれば依存関係を指定し、デバイスに展開します。