iis之如何在powershell中循环直到成功

qlqwjy 阅读:23 2024-10-01 17:34:08 评论:0

%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 

我想运行上面的脚本,如果 appcmd.exe 由于网站尚未启动和准备好而无法执行它,我会在 CBLog.log 文件中收到以下错误消息。

ERROR ( message:Cannot find SITE object with identifier "WebRole_IN_0_CB". )



在 CheckIfSuccessful.ps1 我想创建一个 Powershell 脚本来循环,它运行 appcmd 命令并再次检查错误。然后休眠 5 秒,然后重试,直到成功。

我将如何在 Powershell 中执行此操作?

高度赞赏,

更新:

好的,非常感谢 $lastexitcode 的提示,虽然它看起来很有希望。似乎我在 Powershell 中转换单引号时遇到问题:(以下是我初始 appcmd 命令的一部分)
/[Path='/'].applicationPool:"ASP.NET v4.0" 

我如何在powershell中引用它?我试图简化它,以便 powershell 减少它的麻烦,但现在看来我的命令是错误的,正如它现在所说的:

ERROR ( message:Cannot find SITE object with identifier "v4.0". )


 & $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 
    } 
} 

更新二:
我已经正确逃脱了。但我仍然收到错误消息。如果我在创建该站点后单独运行 appcmd,日志文件就可以了。请问有什么建议吗?

请您参考如下方法:

特殊变量 $lastexitcode为您提供最后运行的 native 可执行文件(即不是 cmdlet)的退出代码。根据操作的结果,这将具有不同的值。例如,如果 appcmd 遇到访问被拒绝,则为 5。如果最后一个命令成功完成,它应该是 0。

确保在运行 appcmd 并在同一脚本中立即检查此变量。如果没有,您可能会从 powershell.exe 而不是从 appcmd.exe 获取退出代码


标签:Shell
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号