エクスポート (0) 印刷
すべて展開

Web 配置 runCommand プロバイダー

更新日: 2009年9月

適用対象: Windows 7, Windows Server 2003, Windows Server 2003 R2, Windows Server 2008, Windows Server 2008 R2, Windows Vista, Windows XP

runCommand

runCommand プロバイダーは、指定されたコマンドを同期先コンピューターで実行します。

msdeploy.exe -verb:sync -source:runCommand="net start MyService" -dest:auto

runCommand プロバイダーは、実行可能 (.exe) ファイル、バッチ (.bat) ファイル、またはコマンド (.cmd) ファイルを Web 配置の操作の一部としてリモートで実行するのに便利です。このプロバイダーは、バッチ ファイル、コマンド ファイル、または実行可能ファイルへのパスが指定された引数を受け付けます。バッチ ファイルまたはコマンド ファイルを指定すると、そのファイルが同期先コンピューターにストリームされ、同期先コンピューターでローカル コマンドとして実行されます。コマンド ファイルまたはバッチ ファイルで参照される実行可能ファイルはコピーされません。これらのファイルは、同期先コンピューター上に既に存在している必要があります。指定するコマンドにスペースが含まれている場合は、コマンド全体を引用符で囲む必要があります。

マニフェスト ファイルでの runCommand の使用

マニフェスト ファイルで runCommand エントリを使用するときに、条件の結合記号 "&&" のような特殊文字が runCommand の引数に含まれている場合は、マニフェスト ファイルの XML が有効になるように、特殊文字を文字エンティティ ("&&" など) に変換する必要があります。たとえば、次のコマンドでは、runCommand プロバイダーを使用して Web 配置エージェント サービスを停止し、stop コマンドが成功した場合にサービスを開始するマニフェスト ファイルが呼び出されます。

msdeploy -verb:sync -source:manifest=mymanifest.xml -dest:auto

Mymanifest.xml:

<myManifest>

   <runcommand path="net stop msdepsvc &amp;&amp; net start msdepsvc" waitInterval="5000"/>

</myManifest>

カスタム プロバイダーの設定

runCommand プロバイダーでは、dontUseCommandExewaitAttempts、および waitInterval という 3 つのカスタム プロバイダーを任意で設定できます。

dontUseCommandExe

使用法: ,runCommand=<filepath>,dontUseCommandExe=<BOOL>

<BOOL> には、true または false を指定する必要があります。runCommand プロバイダーへの引数が別個の実行可能 (.exe) ファイルへのパスとして処理される場合は、True に設定します。バッチ (.bat) ファイルまたはコマンド (.cmd) ファイルへのパスの場合は、false に設定します。既定値は false です。既定では、runCommand プロバイダーは、指定された引数をバッチ ファイルまたはコマンド ファイルとして処理し、同期先で Windows シェル コマンド (cmd.exe /c <batchfilename>) を呼び出します。同期先の実行可能ファイルを直接実行する場合は、dontusecommandexe プロバイダー設定を true に設定します。この場合、指定した実行可能ファイル ("cmd.exe /c <filename>.exe" ではなく "<filename>.exe") が直接呼び出されます。

waitAttempts

使用法: ,runCommand=<commandfilepath>,waitAttempts=<integer>

runCommand プロバイダーが失敗後に再試行する回数を指定します。<number> には、再試行の回数を指定します。有効な整数の範囲は 0 ~ 2147483647 です。既定の再試行回数は 5 回です。既定では、各再試行の間に 1 秒の遅延があります。

waitInterval

使用法: ,runCommand=<commandfilepath>,waitInterval=<integer>

runCommand プロバイダーの再試行の間隔をミリ秒単位で指定します。有効な整数の範囲は 0 ~ 2147483647 です。既定値は 1000 (1 秒) です。

noteメモ
プロバイダー設定 waitAttempts および waitIntervalrunCommand プロバイダーに固有のものであり、操作設定 -retryAttempts および -retryInterval とは別に設定できます。ただし、既定値は同じです。操作設定 -retryAttempts および -retryInterval は、Web 配置のコマンド全体に適用されます。-retryAttempts-retryInterval はプロバイダー固有ではないので、どのプロバイダーでも、再試行ロジックを処理するために使用できます。これらの操作設定は、ファイルが使用中の可能性がある場合に、contentPathdirPathfilePath などのプロバイダーで使用すると特に便利です。-retryAttempts および –retryInterval の詳細については、「Web 配置の操作設定」を参照してください。

runCommand と操作設定 preSync および postSync の併用

Web 配置の操作の前後に実行するコマンドを追加するには、runCommand プロバイダーを、操作設定 -presync および -postSync と共に使用します。これによって、たとえば、サービスの停止、2 台の Web サーバーの同期、およびサービスの開始を、すべて 1 つのコマンドで実行できます。次の例では、リモート コンピューター ServerA で World Wide Web 発行サービス (W3SVC) を停止し、ローカルの IIS 6.0 サーバーを ServerA と同期させて、同期の完了後に ServerA で W3SVC を開始します。

msdeploy -verb:sync -preSync:runCommand="net stop w3svc" -source:webserver60 -dest:auto,computername=serverA -verbose -postSync:runCommand="net start w3svc"

runCommand プロバイダーと Web 管理サービス (WMSvc) の併用

WMSvc が偽装アカウントで実行されている場合は、runCommand プロバイダーを実行できないことがあります。この問題の解決策として、2 つの方法が考えられます。1 つは、必要な特権を WMSvc に追加する方法です。もう 1 つは、このプロバイダーのコマンドを実行するユーザー アカウントに "プロセス レベル トークンの置き換え" 特権を追加する方法です。

Caution注意
WMSvc を介した runCommand の使用をユーザーに許可すると、セキュリティ上の問題が生じるので、可能であれば、許可しないでください。

WMSvc に特権を追加するには

Warning警告
可能であれば、WMSvc に特権を追加することは避けてください。WMSvc に特権を追加すると、サーバーに接続する権利を持つすべてのユーザーにサーバー上でコマンドを実行する権利が与えられます。

WMSvc では、ローカル サービス アカウント自体より特権が少ないローカル サービス SID アカウントを使用します。WMSvc に特権を追加するには、管理コマンド プロンプトで次のコマンドを入力します。

sc privs wmsvc SeChangeNotifyPrivilege/SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege/SeIncreaseQuotaPrivilege

"プロセス レベル トークンの置き換え" 特権を追加するには

  1. 管理コマンド プロンプト ウィンドウを開きます。[スタート] ボタンをクリックし、[すべてのプログラム] をポイントします。次に、[アクセサリ] をポイントし、[コマンド プロンプト] を右クリックして、[管理者として実行] をクリックします。

  2. secpol.msc」と入力し、Enter キーを押します。

  3. [ローカル セキュリティ ポリシー] ウィンドウで、[セキュリティの設定] の [ローカル ポリシー] を展開します。

  4. [ユーザー権利の割り当て] をクリックします。

  5. 右側のウィンドウで、[ポリシー] の [プロセス レベル トークンの置き換え] をダブルクリックします。[プロセス レベル トークンの置き換えプロパティ] ダイアログ ボックスが表示されます。

  6. [ユーザーまたはグループの追加] をクリックします。[ユーザー、コンピューター、またはグループの選択] ダイアログ ボックスが表示されます。

  7. 使用するユーザー名を入力し、[名前の確認] をクリックします。

  8. [OK] を 2 回クリックして、終了します。

使用例

1) リモート コンピューター Server1 でバッチ ファイル "Test.bat" を実行する場合。

     msdeploy -verb:sync -source:runcommand=d:\test.bat -dest:auto,computername=Server1

2) リモート コンピューター Server2 でコマンド ファイル "Commands.cmd" を実行する場合。コマンドが完了するのを 30 秒間待機してから、Cmd.exe プロセスを終了します。

     msdeploy -verb:sync -source:runcommand=c:\Commands.cmd,waitAttempts=30 -dest:auto,computername=Server2

3) リモート コンピューター Server3 で Web 管理サービスを開始する場合。15 秒の待機間隔を指定します。

     msdeploy -verb:sync -source:runcommand -dest:runcommand="net start wmsvc",waitinterval=15000, computername=Server3

4) Cscript.exe 実行可能ファイルを呼び出して、リモート コンピューター Server4 で Myscript.js スクリプト ファイルを実行する場合。すべてのメッセージが表示されます。

     msdeploy -verb:sync -source:runCommand="cscript.exe d:\scriptfiles\myscript.js" -dest:auto,computername=Server4 -verbose

5) Web 配置の tempAgent 機能を使用し、Cscript.exe 実行可能ファイルを呼び出して、リモート コンピューター Server5 で Myscript.js スクリプト ファイルを実行する場合。すべてのメッセージが表示されます。

     msdeploy -verb:sync -source:runCommand="cscript.exe d:\scriptfiles\myscript.js" -dest:auto,computername=Server5,tempAgent=true -verbose

6) Cscript.exe 実行可能ファイルを呼び出して、リモート コンピューター Server6 で "ListAppPools.vbs" スクリプト ファイルを実行する場合。サンプル スクリプトは次のとおりです。

     msdeploy -verb:sync -source:runcommand="cscript.exe c:\scripts\ListAppPools.vbs" -dest:auto,computername=Server6


' =====================================================================
' ListAppPools.vbs – Lists the name and mode of each application pool.
' =====================================================================
' Connect to the WMI WebAdministration namespace.
Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")

' Retrieve the application pools on the server. 
Set oAppPools = oWebAdmin.ExecQuery("SELECT * FROM ApplicationPool")

For Each oAppPool In oAppPools
    WScript.Echo "--------------------------------------"
    WScript.Echo "Application pool name:    " & oAppPool.Name

    If oAppPool.ManagedPipelineMode = 0 Then
        sAppPoolMode = "Integrated"
    ElseIf oAppPool.ManagedPipelineMode = 1 Then
        sAppPoolMode = "ISAPI"
    End if

    WScript.Echo "Application pool mode:    " & sAppPoolMode
Next

関連項目

この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました

コミュニティの追加

追加
表示:
© 2014 Microsoft