RUNAS を実行時にきかれるパスワードを自動で入力するスクリプト

PowerShell や bat などの Windows のスクリプト処理で、runas を実行したときにはパスワード入力を求められます。このパスワードをインタラクティブに入力せず、スクリプト処理の一部として実行させる方法を紹介します。つまりパスワードを手動入力ではなく、あらかじめ設定しているものを自動的に入力する方法を紹介します。

runas の /savecred オプションを利用する

自動入力の方法を紹介する前に、基本的には /savecred オプションの利用を考えましょう。以下のように実行し一度パスワードを入力すると、以降、このオプションをつけた場合、このユーザに対してパスワードを問い合わせられることはありません。

runas /savecred /user:ユーザ名 "cmd /c"

以下は、test_user というユーザというユーザで、すぐに消えるコマンドプロンプトを実行しています。赤色の矢印のところで一回パスワードを求められており、パスワードを入力することで、次の runas の実行(黄色の矢印)ではパスワードは求められません。

これは、以下のように資格情報が保持されるためです。

セキュリティー的には、実行終了時に以下のコマンドか、上述の資格情報マネージャで、街頭の資格情報を消すことをお勧めします。

cmdkey /delete:Domain:interactive=%COMPUTERNAME%\ユーザ名

スポンサーリンク

自動でパスワード入力を実行させる

さて、runas を /savecred オプションで利用するにしても、1度目のパスワードは手動で入力する必要があります。この1度目のパスワードをあらかじめ設定したものを自動的に入力するために、以下の vbs スクリプトを利用します。以下のスクリプトを「sendpassword.vbs」という名前で保存します。

1
2
3
4
5
6
7
8
9
Option Explicit
WScript.Sleep 2000

Dim objwinSh
Set objwinSh = CreateObject("WScript.Shell")
objwinSh.AppActivate("C:\WINDOWS\system32\runas.exe")
objwinSh.SendKeys WScript.Arguments(0)
objwinSh.SendKeys "{ENTER}"
Set objwinSh = Nothing

パスワードを自動入力させるには

先ほど紹介した、スクリプトを以下のように呼び出して利用します。これで 2回目以降の runas ではパスワードを求められません。以下の例では、c:ドライブ直下に test_user 所有の temp というディレクトリを作成します。

1
2
3
4
5
6
7
8
@echo off
set username=test_user
set password=pass12345

start %~dp0\sendpassword.vbs %password%
start /wait runas /savecred /user:%username% "cmd /c"
rem 以降 runas で %username% を利用し放題
runas /savecred /user:%username% "cmd /c mkdir C:\temp"
セキュリティー的には資格情報を削除しておく必要があります。パスワードを記録したユーザは、任意のコマンドが実行可能な状態です。