我正在尝试编写一个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}
}
答案 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
}
}