2011-04-27 53 views

回答

0

这是我决定使用脚本:

$myApplicationPool = Get-WmiObject -Class IISApplicationPoolSetting -Namespace "root\microsoftiisv2" | Where-Object {$_.Name -eq 'W3SVC/APPPOOLS/DefaultAppPool'} 
$myApplicationPool.IdleTimeout=0 
$myApplicationPool.Put() 

如果其他人有更好的方法为这个请让我知道。

希望这可以帮助别人

问候。

+0

请注意,只有安装了IIS 6 WMI兼容性功能,此方法才可用。 – 2016-03-27 16:30:44

4
%windir%\system32\inetsrv\appcmd set config -section:applicationPools 
    -applicationPoolDefaults.processModel.idleTimeout:00:00:00 
+0

或者你可以在你的代码http://msdn.microsoft.com/en-us/library/microsoft.web.administration.servermanager使用'ServerManager的Class' .aspx – 2011-04-27 22:37:10

+0

感谢您的回答,我会尝试一下 – 2011-04-28 16:53:56

+0

我为您提供的两种解决方案做了一个快速的概念证明,但它们似乎无法在Window Server 2003上工作,因为ServerManager仅适用于iis 7和appcmd存在于最新版本的IIS – 2011-05-03 17:20:49

1

我用下面的函数一般地抓住一个应用程序池对象:

$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来修改它们。

+0

我真的很感激这个例子,谢谢! – 2011-04-28 16:54:20

+0

嗨,你有没有机会收集代码?谢谢:) – 2011-05-02 18:18:31

+0

请注意,只有安装了IIS 6 WMI兼容性功能才能使用此方法。 – 2016-03-27 16:31:10

16

如果您使用的是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 
+1

这个答案对我不起作用。我添加了一个适用于我的版本:http://stackoverflow.com/a/41111237/260303 – 2016-12-12 23:13:40

0

改变使用PowerShell中使用下列内容:

$appPoolName = "xxxAppPool" 
&"$env:windir\system32\inetsrv\appcmd" set APPPOOL $appPoolName /processModel.idleTimeout:0.00:00:00 
4

@ R0MANARMY的answer(当前最流行)didn不为我工作。它运行良好,但随后的检查显示空闲超时未变。

根据this blog post,该答案修改了对象的内存中副本。我修改了代码示例中R0MANARMY's answer为:

Get-ChildItem IIS:\AppPools\$name | ForEach { $_.processModel.IdleTimeout = [TimeSpan]::FromMinutes(0); $_ | Set-Item; } 
+0

一个工作班轮。不要忘记从Import-Module WebAdministration开始。 – CodingBarfield 2018-01-12 12:39:07