senote NOTE

VBScript | 管理者権限のないユーザでソフトウェア等をインストールする方法

・Aさんの端末にソフトウェア等をインストールしたい
・でもその端末にログインしているAさんには管理者権限がない
という状況で、Aさんの端末にソフトウェア等をインストールする方法です。

前提条件

① Aさんの端末には管理者権限を持つユーザが存在すること
② ①のユーザのパスワードが分かっていること

概要

VBScriptで、
タスクスケジューラ―に、
ソフトウェア等をインストールするタスクを、
登録&実行する。

※管理者権限でタスクを実行します
※タスクは即時実行されます

手順

テキストエディタ(メモ帳等)を開く


② 以下のコードをコピーし、テキストエディタ(メモ帳等)に貼り付ける 

Const TASK_NAME = "TEST_TASK"            'タスクスケジューラに登録するタスク名
Const ADMIN_ID = "administrator"         '管理者権限ユーザのID
Const ADMIN_PASS = "password"            '管理者権限IDのパスワード
Const INST_EXE_NAME ="C:\TEST\test.exe"  'ソフトウェアのインストーラ―

Dim ObjPcNameShell   '処理対象端末のコンピュータ名取得用OBJ
Dim PcName           '処理対象端末のコンピュータ名
Dim ObjNetwork       '管理者権限取得用OBJ
Dim LogonUserID      'ログオンユーザID
Dim IsAdministrator  '管理者権限あり=True / なし=False
Dim ObjAdminGroup    '処理対象端末のAdministratorsグループ取得用OBJ
Dim AdminUser        '処理対象端末のAdministratorsグループのユーザID
Dim ObjExecShell     'インストールEXE実行用OBJ

'処理対象端末のコンピュータ名を取得===================================
Set ObjPcNameShell = CreateObject("WScript.Network")
PcName = ObjPcNameShell.ComputerName

'ログオンユーザに管理者権限があるか確認===============================
Set ObjNetwork = CreateObject("Wscript.Network")
LogonUserID = ObjNetwork.UserName

IsAdministrator = false

Set ObjAdminGroup = GetObject("WinNT://" & PcName & "/Administrators")
For Each AdminUser in ObjAdminGroup.Members
    If AdminUser.Name = LogonUserID Then
        IsAdministrator = true
    End If
Next

'インストールEXEを実行================================================
Set ObjExecShell = WScript.CreateObject("WScript.Shell")
If IsAdministrator = true Then
    ''管理者権限があれば直接インストールEXEを実行
    ObjExecShell.Run INST_EXE_NAME, vbhide, true
Else
    ''管理者権限がなければタスクスケジューラでインストールEXEを実行する
    ObjExecShell.Run "cmd /c schtasks.exe /CREATE /RU " & ADMIN_ID & " /RP " & ADMIN_PASS & " /SC ONCE /st " & FormatDateTime(Now(), vbShortTime) & " /TN " & TASK_NAME & " /TR " & INST_EXE_NAME & " /F & schtasks /run /TN " & TASK_NAME, vbhide, true
End If

Set ObjPcNameShell = Nothing
Set ObjNetwork = Nothing
Set ObjAdminGroup = Nothing
Set ObjExecShell = Nothing

 ※1~4行目の4つのConstの値は、ご利用の環境に合わせて変更する必要があります 。
 ※インストーラーの画面は表示されないようにしています。
  表示する場合は、2か所の「vbhide」を半角スペースに置換してください。


③ 拡張子を「.vbs」にして保存する
例)TEST.vbs


④ Aさんの端末で実行する


以上