Function Reference

RunAs

別ユーザーの権限で外部プログラムを実行します。

RunAs ( "username", "domain", "password", logon_flag, "program" [, "workingdir" [, show_flag [, opt_flag ]]] )

 

パラメータ

username ログオンするユーザー名
domain 認証ドメイン
password ユーザーのパスワード
logon_flag 0 - プロフィールなしの対話型ログオン
1 - プロフィールありの対話型ログオン
2 - ネットワーク信認のみ
4 - ユーザーの代わりに呼び出しプロセスの環境を継承
program 実行するプログラム(EXE、BAT、COM、またはPIF)のフルパス(注意を参照)
workingdir [オプション] 作業ディレクトリ。指定しない場合、@SystemDirが使用されます。これはプログラムのパスではありません。
show_flag [オプション] 実行プログラムの"表示"フラグ:
  @SW_HIDE = 非表示ウィンドウ (デフォルト)
  @SW_MINIMIZE = 最小化ウィンドウ
  @SW_MAXIMIZE = 最大化ウィンドウ
opt_flag [オプション] 親プロセスと子プロセスの連携方法に関連したさまざまなオプションを制御します。
  0x1 ($STDIN_CHILD) = 子のSTDINストリームのハンドルを提供します。
  0x2 ($STDOUT_CHILD) = 子のSTDOUTストリームのハンドルを提供します。
  0x4 ($STDERR_CHILD) = 子のSTDERRストリームのハンドルを提供します。
  0x8 ($STDERR_MERGED) = STDOUTとSTDERRを同じハンドルで提供します。$STDOUT_CHILDと$STDERR_CHILDの両方を設定するのと同じです。
  0x10 ($STDIO_INHERIT_PARENT) = 親のSTDIOストリームを子に提供します。このフラグを他のSTDIOフラグと組み合わせることはできません。このフラグは親をコンソールアプリケーションとしてコンパイルした場合のみ使用できます。
  0x10000 ($RUN_CREATE_NEW_CONSOLE) = 子コンソールプロセスは親のウィンドウを使用する代わりに独自のウィンドウを作成します。 このフラグは親をコンソールアプリケーションとしてコンパイルした場合のみ使用できます。

 

返し値

成功 立ち上がったプロセスのPID
失敗 0を返し、@errorを非ゼロに設定します。

 

注意

スペースを含むパスはコーテーションマークで囲む必要があります。

実行時にアクセスする作業ディレクトリはユーザーに指定させることが重要です。さもないとこの関数が失敗することがあります。

ユーザーのプロフィールは確実に必要な場合のみロードすることをお勧めします。正しい状態でメモリにプロフィールをスタックできることは稀です。RunAs()を使ったスクリプトをSYSTEMアカウントで実行し(例えばスクリプトをサービスとして実行している場合)、ユーザーのプロフィールがロードされる場合は子プロセスが終了するまでスクリプトの実行が継続するように注意する必要があります。

管理者として実行する場合はSecondary Logon(RunAs)サービスが有効にされている必要があります。さもないとこの関数は失敗します。これはSYSTEMアカウントで実行する際は関係ありません。

要求されたプログラムの実行後、スクリプト処理は継続します。立ち上げたプログラムが終わるまでスクリプトの実行を一時停止する場合は代わりにRunAsWait関数を使用してください。

標準I/Oパラメータに適切な値を指定することでStderrRead関数、StdinWrite関数、StdoutRead関数を使用して子プロセスと連携ができます。複数のストリームを使用する場合はフラグの値(またはConstants.au3で定義されている$STDERR_CHILD、 $STDIN_CHILD、 $STDOUT_CHILD)を組み合わせます。

ストリームを閉じるためには次の条件が満たされる必要があります: 1) 子プロセスがそのストリーム終端を閉じている。(これは子プロセスでの処理です)。 2) AutoItがキャプチャーしたストリームの全データを読み込んだ。 3) 子にSTDINが指定されている場合、ストリームを閉じるためのStdinWrite() が呼び出された。 一度全てのストリームが不必要であることが判明すると、全内部リソースが自動的に解放されます。
StdioCloseを使用して強制的にSTDIOストリームを閉じることも可能です。

"プロフィールロード"オプションと"ネットワーク信認のみ"オプションを組み合わせることはできません。両方を使用した場合、未定義の結果が返ります。

Windows XPではウィンドウ生成がSTDIOリダイレクションと表示フラグの動作を妨害するという問題があります。Microsoft Knowledge Baseの記事KB818858にどのバージョンでこの問題が起きるか、ホットフィックスする必要があるかの詳細な情報がありますので参照してください。Windows 2000、Windows XP SP2以降、Windows Vistaではこの問題はありません。

 

関連

Run, RunWait, RunAsWait, ShellExecute, ShellExecuteWait, StderrRead, StdinWrite, StdoutRead, StdioClose, ProcessClose

 


; 実行するシステムのユーザー名とパスワードを正しく設定すること
Local $sUserName = "Username"
Local $sPassword = "Password"

; 別ユーザーとしてコマンドプロンプトを実行
RunAs($sUserName, @ComputerName, $sPassword, 0, @ComSpec, @SystemDir)