はじめに
IntuneでWin32アプリのインストールを行う場合、ユーザまたはシステムコンテキストのどちらかを選択します。大半のアプリは管理者権限でのインストールの為、システムコンテキストでの実行を選択すると思います。
インストールの途中にユーザコンテキストで実行したいコマンドがある場合に、何か対応方法がないか検索したところ、PSAppDeployToolkitで実行できることがわかりましたので、その方法を共有します。
一例として、インストールするかどうかをユーザに意向確認するとか、インストール中にファイルサーバにアクセスをして、何らかのパラメータファイルをコピーするようなケースです。(たぶんシステムアカウントではファイルサーバにはアクセスできない。。と思っています。)
実行方法
キーとなるのは以下のfunctionです。
どうやら、タスクスケジューラにタスクとして実行コマンドを登録し、それを実行することで、ユーザコンテキストでのプロセス実行を行うようです。
なかなか面白い方法です。
実践編
では、実際にやってみます。
Filesの下には以下の2つのファイルを配置します。
checkuser.vbsは以下のような簡単なものです。インストールをするかどうか確認し、Yesなら0を、Noなら1を返します。
x = Msgbox ("Install?", vbyesno , "InstallCheck")
If x = vbYes then
WScript.Quit(0)
ElseIf x = vbNo then
WScript.Quit(1)
End If
Deploy-Applicationの中に以下のコードを追加します。
-checkuser.vbsを誰でもアクセスできるフォルダにコピー(この例ではC:)
-ExecuteProcessAsUserを利用してスクリプトを実行します。(この例では、ログオンユーザで実行されます)
ユーザがNoを選択した場合には、exit code 1で終了します。Yesの場合にはそのまま継続し、後続のインストール処理を行います。
## <Perform Pre-Installation tasks here>
Copy-File -Path "$dirFiles\checkuser.vbs" -Destination "c:\checkuser.vbs"
$a=Execute-ProcessAsUser -Path "wscript.exe" -Parameters "c:\checkuser.vbs" -Wait -PassThru
if ($a -eq 1 ) {
Exit-Script -ExitCode 1
}
それではテストしてみます。システムコンテキストで実行する為にpsexecを利用しましょう。
コマンドプロンプトを管理者権限で実行します。そして、以下のように実行します。
psexec -s <Deploy-Application.exeの絶対パス>
psexec経由でDeploy-applicationが実行されます。
そして、checkuser.vbsのダイアログが表示されました。
Deploy-Applicationは正しくシステムコンテキストで実行されています。
一方のcheckuer.vbsはログオンユーザで実行されています。
タスクスケジューラを開くと、psappdeploytoolkitが作成したタスクが確認できます、実行中になっています。
ちなみにこのタスクは実行終了後に削除されていました。
なかなか他ではできない便利な機能ですね、何かのお役に立てばと思います。