根据http响应代码重新启动应用程序池

时间:2015-07-18 14:12:05

标签: powershell iis

我正在尝试编写一个PowerShell脚本,如果收到503响应代码,将重新启动IIS中的应用程序池。

到目前为止,我已经设法为IIS中的默认网站下的每个crm应用程序检索响应代码。但是我不确定如何找到应用程序池名称。我已尝试过以下内容,但它为每个站点返回相同的应用程序池。有人可以帮忙吗?

$getSite = (Get-WebApplication -Site 'Default Web Site')
$SiteURL = ForEach ($site in $getSite.path) {("http://localhost")+$site}
ForEach ($crm in $SiteURL){
$req = [system.Net.WebRequest]::Create($crm)
try {
   $res = $req.GetResponse()
 } catch [System.Net.WebException] {
   $res = $_.Exception.Response
 }
$ApplicationPool = ForEach ($app in $getSite.applicationpool) {$app}  
 if([int]$res.StatusCode -eq 503)  {write-host ($crm + ' ' +  [int]$res.StatusCode) + $app}
 }

1 个答案:

答案 0 :(得分:2)

我认为您需要访问$_.Exception.InnerException属性的Response

您的$ApplicationPool作业没有多大意义,因为您测试的每个applicationPool应用只需要一个$crm名称:

foreach($App in @(Get-WebApplication -Site 'Default Web Site')){

    # Uri for the application
    $TestUri = 'http://localhost{0}' -f $App.path

    # Create WebRequest
    $Request = [system.Net.WebRequest]::Create($TestUri)
    try {
        # Get the response
        $Response = $Request.GetResponse()
    } catch [System.Net.WebException] {
        # If it fails, get Response from the Exception
        $Response = $_.Exception.InnerException.Response
    }

    # The numerical value of the StatusCode value is the HTTP status code, ie. 503
    if(503 -eq ($Response.StatusCode -as [int])){
        # Restart the app pool
        Restart-WebAppPool -Name $App.applicationPool
    }
}