5
%WINDIR%\system32\inetsrv\appcmd.exe set site /site.name:"WebRole_IN_0_CB" /[Path='/'].applicationPool:"ASP.NET v4.0" >>CBLog.log
powershell.exe -command Set-ExecutionPolicy Unrestricted
powershell.exe .\CheckIfSuccessful.ps1

上記のスクリプトを実行したいのですが、Web サイトがまだ起動して準備ができていないために appcmd.exe がスクリプトを実行できない場合、CBLog.log ファイルに次のエラー メッセージが記録されます。

エラー (メッセージ: 識別子 "WebRole_IN_0_CB" を持つ SITE オブジェクトが見つかりません。)

CheckIfSuccessful.ps1 で、appcmd コマンドを実行してエラーを再度チェックする、ループする Powershell スクリプトを作成したいと思います。その後、5 秒間スリープしてから、成功するまで再試行します。

Powershellでこれを行うにはどうすればよいですか?

高く評価、

アップデート:

わかりました、有望に見えますが、$lastexitcode に関するヒントをありがとうございます。Powershell で一重引用符を変換する際に問題があるようです: (以下は私の最初の appcmd コマンドの一部です)

/[Path='/'].applicationPool:"ASP.NET v4.0"

これをpowershellで引用するにはどうすればよいですか? powershell で問題が発生しないように単純化しようとしましたが、次のようにコマンドが間違っているようです。

エラー (メッセージ: 識別子 "v4.0" の SITE オブジェクトが見つかりません。)

 & $Env:WinDir\system32\inetsrv\appcmd.exe set site '/site.name:"WebRole_IN_0_CB"' "/[Path='/'].applicationPool:`"ASP.NET v4.0`"" >CBLog.log
if($lastexitcode -ne '0')
{
    while($lastexitcode -ne '0')
    {
        Start-Sleep -s 5
        & $Env:WinDir\system32\inetsrv\appcmd.exe set site '/site.name:"WebRole_IN_0_CB"' "/[Path='/'].applicationPool:`"ASP.NET v4.0`"" >CBLog.log
    }
}

更新 II: 適切にエスケープしました。しかし、それでもエラーメッセージが表示されます。そのサイトを作成した後に appcmd を単独で実行すると、ログ ファイルは問題ありません。何か提案はありますか?

4

2 に答える 2

5

特殊変数$lastexitcodeは、実行された最後のネイティブ実行可能ファイル (つまり、コマンドレットではない) の終了コードを提供します。これは、操作の結果によって異なる値になります。たとえば、appcmd でアクセスが拒否された場合は 5 になります。最後のコマンドが正常に完了した場合は 0 になります。

appcmd を実行した直後に同じスクリプトでこの変数を確認してください。そうでない場合、appcmd.exe からではなく、powershell.exe から終了コードを取得するリスクがあります。

于 2011-12-01T01:21:52.490 に答える