我想禁用应用程序池的空闲超时(将其设置为零),我想在安装时执行此操作,是否可以使用C#或PowerShell执行此操作?- 是否可以从应用程序池更改IIS空闲超时?
回答
这是我决定使用脚本:
$myApplicationPool = Get-WmiObject -Class IISApplicationPoolSetting -Namespace "root\microsoftiisv2" | Where-Object {$_.Name -eq 'W3SVC/APPPOOLS/DefaultAppPool'}
$myApplicationPool.IdleTimeout=0
$myApplicationPool.Put()
如果其他人有更好的方法为这个请让我知道。
希望这可以帮助别人
问候。
%windir%\system32\inetsrv\appcmd set config -section:applicationPools
-applicationPoolDefaults.processModel.idleTimeout:00:00:00
或者你可以在你的代码http://msdn.microsoft.com/en-us/library/microsoft.web.administration.servermanager使用'ServerManager的Class' .aspx – 2011-04-27 22:37:10
感谢您的回答,我会尝试一下 – 2011-04-28 16:53:56
我为您提供的两种解决方案做了一个快速的概念证明,但它们似乎无法在Window Server 2003上工作,因为ServerManager仅适用于iis 7和appcmd存在于最新版本的IIS – 2011-05-03 17:20:49
我用下面的函数一般地抓住一个应用程序池对象:
$query = "Select * From IIsApplicationPoolSetting WHERE WAMUserName LIKE '%$uServer'"
$query
$pools = Get-WmiObject -Authentication 6 -ComputerName $server -Query $query -Namespace 'root/microsoftiisv2'
if ($pools)
{
foreach ($pool in $pools)
{
Write-Host(" WAM Pool: " + $pool.Name + ", " + $pool.WAMUserName + " (" + $pool.WAMUserPass + ")")
}
}
而且从一个不相关的代码,这里就是我放在一个新的应用程序池的站点。这只是一个如何使用Set-WMIInstance的例子。
if ($site.AppPoolID -ne $poolID)
{
# Write-Host("Updating $($site.Name) from $($site.AppPoolID) to $($poolID)")
$wmiArgs = @{"AppPoolID"=$poolID}
[void](Set-WMIInstance -InputObject $site -Arguments $wmiArgs)
} else {
# Write-Host("No update needed")
}
使用Get-Member来了解您的$ pool的属性,然后使用Set-WMIInstance来修改它们。
我真的很感激这个例子,谢谢! – 2011-04-28 16:54:20
嗨,你有没有机会收集代码?谢谢:) – 2011-05-02 18:18:31
请注意,只有安装了IIS 6 WMI兼容性功能才能使用此方法。 – 2016-03-27 16:31:10
如果您使用的是PowerShell 2或更高版本,则应该有权访问Set-ItemProperty。您还需要加载WebAdministration模块。
然后你可以做(例如,从here拍摄)
Set-ItemProperty ("IIS:\AppPools\$name") -Name processModel.idleTimeout -value ([TimeSpan]::FromMinutes(0))
,并验证该值与
Get-ItemProperty ("IIS:\AppPools\$name") -Name processModel.idleTimeout.value
这个答案对我不起作用。我添加了一个适用于我的版本:http://stackoverflow.com/a/41111237/260303 – 2016-12-12 23:13:40
改变使用PowerShell中使用下列内容:
$appPoolName = "xxxAppPool"
&"$env:windir\system32\inetsrv\appcmd" set APPPOOL $appPoolName /processModel.idleTimeout:0.00:00:00
@ R0MANARMY的answer(当前最流行)didn不为我工作。它运行良好,但随后的检查显示空闲超时未变。
根据this blog post,该答案修改了对象的内存中副本。我修改了代码示例中R0MANARMY's answer为:
Get-ChildItem IIS:\AppPools\$name | ForEach { $_.processModel.IdleTimeout = [TimeSpan]::FromMinutes(0); $_ | Set-Item; }
一个工作班轮。不要忘记从Import-Module WebAdministration开始。 – CodingBarfield 2018-01-12 12:39:07
请注意,只有安装了IIS 6 WMI兼容性功能,此方法才可用。 – 2016-03-27 16:30:44