在C#/ Powershell中 - 是否可以更改IIS应用程序池的空闲时间?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C#/ Powershell中 - 是否可以更改IIS应用程序池的空闲时间?相关的知识,希望对你有一定的参考价值。

我想禁用应用程序池的空闲超时(设置为零),我想在设置时执行此操作,是否可以从C#或PowerShell执行此操作?

答案

如果您使用的是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
另一答案

@ R0MANARMY的answer(目前最受欢迎的)对我不起作用。它运行正常,但后续检查显示空闲超时未更改。

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

Get-ChildItem IIS:AppPools$name | ForEach { $_.processModel.IdleTimeout = [TimeSpan]::FromMinutes(0); $_ | Set-Item; }
另一答案
%windir%system32inetsrvappcmd set config -section:applicationPools
   -applicationPoolDefaults.processModel.idleTimeout:00:00:00
另一答案

我使用以下函数来一般地抓取一个应用程序池对象:

$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 + ")")
    }
}

从一段不相关的代码中,我将网站放在新的App Pool中。这只是一个如何使用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修改它们。

另一答案

这是我决定使用的脚本:

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

如果其他人有更好的方法,请告诉我。

希望这能有所帮助

问候。

另一答案

使用PowerShell时,请使用以下命令:

$appPoolName = "xxxAppPool"
&"$env:windirsystem32inetsrvappcmd" set APPPOOL $appPoolName /processModel.idleTimeout:0.00:00:00
另一答案

获取应用程序池配置(供参考)

$appPoolName = 'MyAppPoolName'
$appPoolPath = '/system.applicationHost/applicationPools/Add[@name="' + $appPoolName + '"]//.'
Get-WebConfiguration $appPoolPath -PSPATH iis:

设置应用程序池空闲超时

$appPoolName = 'MyAppPoolName'
$appPoolPath = '/system.applicationHost/applicationPools/Add[@name="' + $appPoolName + '"]/processModel'
Set-WebConfigurationProperty $appPoolPath -Name idleTimeout -value ([TimeSpan]::FromMinutes(0)) -PSPATH iis:

以上是关于在C#/ Powershell中 - 是否可以更改IIS应用程序池的空闲时间?的主要内容,如果未能解决你的问题,请参考以下文章

Powershell 如何判断一个用户是否在一个用户组里面

PowerShell - 枚举集合并更改集合

如何通过powershell或C#使用本地IP远程更新azure SQL防火墙

是否有可能弄清楚IE是否从C#或PowerShell代码重新下载Silverlight xaps?

PowerShell~执行策略的介绍

PowerShell 登录名和权限