くらめその情シス:IntuneのスクリプトでURLリンクを自動作成する

2020.07.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

どうも、情シスの徳道です。

前回の記事でMacOSアプリインストールでシェルスクリプトを使いました。Intuneのスクリプトを使うことでIntuneの標準的な構成プロファイルではカバーしないユーザー独自の設定をある程度自動化することができます。

今回はPCセットアップ時の手作業をIntuneで自動化した例を紹介します。

PCのセットアップで新入社員向けや、入れ替えであっても最初は基本的な社内システムへのアクセスリンクがあると楽ですよね。

弊社でもメール、社内Wiki、チャット、パスワード管理システムなどへの初期アクセス用にURLリンクファイルを設定するようにしています。手作業の時はURLリンクファイルをサーバからコピーしていました。ファイルコピーだとダウンロードできるサーバを用意しないといけないので、今回はお手軽にURLリンクファイルをスクリプトから作成することにしました。

【この記事の目的】

PowerShell(Windows10)、シェルスクリプト(MacOS)を使用して以下の設定を行います。

  • デスクトップに社内システムのURLリンクファイルを作成

【ご注意ください】

このシリーズでは以下の条件を満たしAzureを既に利用できていることが前提になっています。

  • Office365などでAzureでライセンス管理が利用可能であること
  • AzureADにユーザー、グループ情報があること(AzureAD Connector連携含む)
  • Azureのグローバル管理者アカウントの権限を持っていること

Windows用のURLリンク作成スクリプト

Windows用のスクリプトを準備

ではWindows用のサンプルスクリプトを作成します。

Windows用の.urlファイルの中身はテキストファイルです。[InternetShortcut]セクションにURLを指定し、ファイルの拡張子を.urlにすれば既定のブラウザで開くことができます。

このスクリプトはPowershellのNewItemコマンドレットでファイル名と内容を指定してファイルに書き出しています。

実行した結果はレジストリに記録しています(この辺りは応用範囲が広いかもしれませんね)。

【サンプル:Windows10向け】

#URLファイル生成
#全ユーザーのデスクトップに作成する

#####実行済みかチェック

$AlreadyResult = Get-ItemProperty HKCU:\Environment -name RunAlreadyCreateUrlShortcut -ErrorAction SilentlyContinue

if ( $AlreadyResult."RunAlreadyCreateUrlShortcut" -eq "True"){
#if ( $AlreadyResult -ne $null ){
exit 0
}

#####G Suite
$fileName = "G Suite.url"
$doc = "[InternetShortcut]
IDList=
URL=https://mail.google.com/"
New-Item -path C:\Users\Public\Desktop -ItemType "file" -Name $fileName -Value "$doc" -Force

#####Slack
$fileName = "Slack.url"
$doc = "[InternetShortcut]
IDList=
URL=https://xxxxxxx.slack.com/"
New-Item -path C:\Users\Public\Desktop -ItemType "file" -Name $fileName -Value "$doc" -Force

#####CM-Confluence
$fileName = "CM-Confluence.url"
$doc = "[InternetShortcut]
IDList=
URL=社内WikiのURL"
New-Item -path C:\Users\Public\Desktop -ItemType "file" -Name $fileName -Value "$doc" -Force

#####一度実行済みであることをユーザーのレジストリに記録

Set-ItemProperty -Path HKCU:\Environment -Name RunAlreadyCreateUrlShortcut -Value True

exit 0

これをCreateUrlShortcut.ps1として保存します。

【2020年12月16日追記】

2バイト文字(日本語)を表示させる場合、スクリプトファイルの文字コードをBOM付UTF-8に変更しておきましょう。

※SJIS、UTF-8などの場合、実行された環境で文字化けが発生します。

IntuneにWindows用スクリプトを登録

Powershell登録の詳細手順はシリーズ記事くらめその情シス:Intuneのスクリプトを使用してローカルAdministratorユーザーを有効化する:Intuneにスクリプトを登録をご覧ください。

設定は以下の通りにしています(Publicのデスクトップに書き込むので管理権限です)。割り当てはユーザーグループを指定します。

MacOS用のURLリンクファイル作成スクリプト

次にMacOS用スクリプトを作成します。

MacのURLリンクファイルは拡張子.webloc、ファイルの中身はxmlになっています。

各URLリンクごとの中身の違いはURLキーのStringだけですので、サンプルを1つ作成し、URLが書かれているところを書き換えるとよいです。

なお、スクリプトに変数として設定する場合は改行コードが含まれても問題ないはずですが、念のため1ライナーで改行コードを含めずに設定するとトラブルが起きにくいようです。

【サンプル:MacOS向け】

</pre>
#!/bin/sh
# ユーザーのデスクトップにURLを貼り付け
# CreateURL.Infoファイルが存在していなかったら、ショートカットを作成

ls $HOME/.CreateURL.Info
if [ $? -eq 0 ]; then
exit 0
fi
#Check Section End

#####G Suite
GOOGLE_URL='<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>URL</key> <string>https://mail.google.com/</string> </dict> </plist>'

#####Slack
SLACK_URL='<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>URL</key> <string>https://xxxxxxxx.slack.com/</string> </dict> </plist>'

#####CM-Confluence
CONFLUENCE_URL='<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>URL</key> <string>https:社内WikiのURL</string> </dict> </plist>'

echo "$GOOGLE_URL" > $HOME/Desktop/G_Suite.webloc
echo "$SLACK_URL" > $HOME/Desktop/Slack.webloc
echo "$CONFLUENCE_URL" > $HOME/Desktop/CM-Confluence.webloc

#####実行済みマークファイルを作成

echo "URL File Created" > $HOME/.CreateURL.Info
date >> $HOME/.CreateURL.Info
<pre>

これをCreateUrlShortcul.shとして保存します。

IntuneにMacOS用スクリプトを登録

シェルスクリプトの登録はシリーズ記事 くらめその情シス:IntuneでMacにシェルスクリプトでアプリをインストール:Intuneにシェルスクリプトを登録  をご覧ください。

設定は以下の通りです。このシェルスクリプトはMacにログオンしたユーザーを対象に実行するので「サインインしたユーザーとしてスクリプトを実行する」を「はい」とします。

実行結果の確認

あとは実際のマシン上でスクリプトが実行されてデスクトップにURLが表示されることを確認しましょう。

【Windows】

【MacOS】

MacOSでは拡張子が見えてしまっています。スクリプトで作成したファイルはFinder設定で拡張子を隠すようにしていても表示されてしまいます。

今回は一時的なものということでそのままにしていますが、AppleScriptなどで拡張子を隠す処理を追加すればスマートになると思います。

アトセツ:プラットフォームによるIntuneのスクリプト挙動の違いについて

今回、URLリンクはWindowsはPublicのデスクトップ、MacOSはユーザーのデスクトップ向けに作成しました。

なぜ作成先を変えているかというと、IntuneにおけるWindows用スクリプトとMacOS用シェルスクリプトの挙動の違いを考慮したためです。

Windowsのスクリプト実行は最初の1回だけ

 スクリプトは一度実行されると、スクリプトまたはポリシーに変更が発生するまで、再実行されません。 スクリプトが失敗した場合、Intune 管理拡張機能エージェントでは、次の 3 つの連続する Intune 管理拡張機能エージェントのチェックインに対して、スクリプトの再試行が 3 回試行されます。

MacOSのスクリプトは繰り返し実行させることができる

サインイン ユーザーとして実行されているシェル スクリプトは、実行時、デバイス上で現在サインインしているすべてのユーザー アカウントに対して実行されます。

スクリプトの頻度: スクリプトが実行される頻度を選択します。 スクリプトを 1 回だけ実行する場合は、 [未構成] (既定値) を選択します。

弊社ではデバイス登録マネージャー(DEM)のアカウントを使ってIntuneに登録を行っています。

Windowsマシンをセットアップする際にIntuneスクリプトはDEMアカウントでのログイン時に1回実行されます。しかしそのあとで実際に利用するユーザーを割り当て、そのユーザーでログインしてもスクリプトは実行されません。ユーザープロファイル別にURLリンクファイルを作成すると、後から作ったユーザーのデスクトップにファイルがない状態になり、不都合です。そのため、最初に動作するスクリプトでPubilcのデスクトップにファイルを作成しています。

共有デバイスであればログインするアカウントごとにスクリプトが実行されるようですが、今回は1ユーザーの占有デバイスが想定です。

【参考】Intune を使用して共有 PC またはマルチユーザー デバイスでのアクセス、アカウント、および電源機能を制御する

MacOS版はユーザー別に繰り返しシェルスクリプトが実行させることができるのでこの問題は起きません。

挙動に違いがあることを認識しておくとトラブルシューティングに役立つのではないでしょうか。

さいごに

これでスクリプト設定でURLの作成をすることができました。ちょっとしたことですが、自動セットアップで細かい作業までできれば漏れや間違いがなくなり、作業者のストレスも減ると思います。

スクリプトはコマンドラインで実行できるものであればかなりの範囲で動作するようです。

もっと細かなカスタマイズ設定や、かつてグループポリシーで配布していたユーザー設定など、いろいろと試してみるといいかもしれませんね。

それではまた次の記事でお会いしましょう。

AzureAD&Intuneに関するまとめ記事

AzureAD&Intuneに関して、以下リンクから参照できます。

くらめその情シス:AzureADとIntuneを使ってPC管理を効率化してみた