[VBScript] ユーザログイン状態のまま管理者実行する方法
2020年 12月 20日
システム管理者なら知っておくべき、ユーザログイン状態のまま管理者実行する方法
- 一人ひとりに与えられた専用PC(=管理者ログインでの利用)
- 複数で共用利用するPC(=ユーザログインでの利用)
![[VBScript] ユーザログイン状態のまま管理者実行する方法_a0021757_13343349.png](https://pds.exblog.jp/pds/1/202105/07/57/a0021757_13343349.png)
ユーザログインでも管理者権限を得る方法がある!
- それは、RUNASコマンド。
RUNASコマンドなら、ユーザログインのまま管理者ログインになり替わることができる。
RUNAS 使用法:
RUNAS [ [/noprofile | /profile] [/env] [/savecred | /netonly] ]
/user:<ユーザー名> プログラム
RUNAS [ [/noprofile | /profile] [/env] [/savecred] ]
/smartcard [/user:<ユーザー名>] プログラム
RUNAS /trustlevel:<信頼レベル> プログラム
/noprofile ユーザーのプロファイルを読み込まないように指定します。
この結果、アプリケーションをより速く読み込むことができま
すが、一部のアプリケーションが正しく動作しない可能性があ
ります。
/profile ユーザーのプロファイルを読み込むように指定します。
これは既定値です。
/env ユーザーの環境ではなく、現在の環境を使用する場合に使います
/netonly 指定された資格情報をリモート アクセスのみで使用する場合に
使います。
/savecred ユーザーが以前に保存した資格情報を使います。
このオプションは Windows 7 Home Edition
または Windows 7 Starter Edition では使用できません
Edition では利用できないので無視されます。
/smartcard 資格情報がスマート カードから提供される場合に使います。
/user <ユーザー名> の形式は、"ユーザー@ドメイン" または
"ドメインユーザー" です]
/showtrustlevels /trustlevel に対して引数として使用できるレベルを表示し
ます。
/trustlevel <レベル> は /showtrustlevels に列挙されているレベルの
いずれかです。
プログラム 実行可能なコマンドラインです。下の例を参照してください。
例:
> runas /noprofile /user:mymachineadministrator cmd
> runas /profile /env /user:mydomainadmin "mmc %windir%system32dsa.msc"
> runas /env /user:user@domain.microsoft.com "notepad "my file.txt""
注意: 要求されたときのみ、ユーザーのパスワードを入力してください。
注意: /profile は /netonly と互換性がありません。
注意: /savecred は /smartcard と互換性がありません。
んで、RUNASを使えば解決するのか?
- ザンネンながら、RUNASを使えばすべて解決するわけではない。
なぜなら、RUNASは指定したユーザプロファイル(ここでは管理者ログイン)のパスワードが必要になるからだ。
つまり、管理者ログインのパスワードを知らないと使えない。
ならば、どうするか?
VBScriptのSendKeysでパスワード入力操作をさせればよい。
- VBScriptからRunAsを実行し、RunAsに対してSendKeysを用いてパスワードを自動入力させればよい。
以下ソースにてユーザ名とパスワードは実行するPCにて変更すること。
つまり、管理者名とパスワードは固定、もしくは、PC情報に紐付く情報で生成しておくとよい。
'-------------------------------------------------------------------------------
' アドミニ権限で実行
'-------------------------------------------------------------------------------
Sub ExecuteAdmin(Command)
Dim objWS
Dim wsEnv
Dim id,pw
Set objWS = CreateObject("WScript.Shell")
Set wsEnv = objWS.Environment("Process")
id = wsEnv("COMPUTERNAME") & "AdminUser" ' PCローカルの管理者ユーザ
pw = "AdminUser_Password_0123" ' 管理者ユーザのパスワード
' runasコマンドを実行
objWS.Run "runas /user:" & id & " """ & Command & """" ' コマンドを「"」で囲む
WScript.Sleep 500
objWS.AppActivate("runas.exe") ' runasを最前面
WScript.Sleep 500
objWS.SendKeys(pw)
objWS.SendKeys("{enter}")
End Sub
ん???これって管理者ログインとそのパスワードが丸見えじゃない?
- あっバレた??
その通り、スクリプトの中身を見られるとパスワードがダダ漏れ。
これの対策は次回に。
にほんブログ村

