PowerShell や bat などの Windows のスクリプト処理で、runas を実行したときにはパスワード入力を求められます。このパスワードをインタラクティブに入力せず、スクリプト処理の一部として実行させる方法を紹介します。つまりパスワードを手動入力ではなく、あらかじめ設定しているものを自動的に入力する方法を紹介します。
runas の /savecred オプションを利用する
自動入力の方法を紹介する前に、基本的には /savecred オプションの利用を考えましょう。以下のように実行し一度パスワードを入力すると、以降、このオプションをつけた場合、このユーザに対してパスワードを問い合わせられることはありません。
以下は、test_user というユーザというユーザで、すぐに消えるコマンドプロンプトを実行しています。赤色の矢印のところで一回パスワードを求められており、パスワードを入力することで、次の runas の実行(黄色の矢印)ではパスワードは求められません。
これは、以下のように資格情報が保持されるためです。
セキュリティー的には、実行終了時に以下のコマンドか、上述の資格情報マネージャで、街頭の資格情報を消すことをお勧めします。
自動でパスワード入力を実行させる
さて、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" |