我想禁用应用程序池的空闲超时(将其设置为零),我想在设置时执行此操作,是否可以从C#或PowerShell执行此操作?
答案 0 :(得分:20)
如果您使用的是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 :(得分:5)
@ R0MANARMY的answer(目前最受欢迎的)对我不起作用。它运行正常,但后续检查显示空闲超时未更改。
基于this blog post,该答案修改了对象的内存中副本。我将R0MANARMY's answer中的示例代码修改为:
Get-ChildItem IIS:\AppPools\$name | ForEach { $_.processModel.IdleTimeout = [TimeSpan]::FromMinutes(0); $_ | Set-Item; }
答案 2 :(得分:4)
%windir%\system32\inetsrv\appcmd set config -section:applicationPools
-applicationPoolDefaults.processModel.idleTimeout:00:00:00
答案 3 :(得分: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 + ")")
}
}
从一段不相关的代码中,我将网站放在新的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修改它们。
答案 4 :(得分:0)
这是我决定使用的脚本:
$myApplicationPool = Get-WmiObject -Class IISApplicationPoolSetting -Namespace "root\microsoftiisv2" | Where-Object {$_.Name -eq 'W3SVC/APPPOOLS/DefaultAppPool'}
$myApplicationPool.IdleTimeout=0
$myApplicationPool.Put()
如果其他人有更好的方法,请告诉我。
希望这有助于某人
问候。
答案 5 :(得分:0)
使用powershell时,请使用以下命令:
$appPoolName = "xxxAppPool"
&"$env:windir\system32\inetsrv\appcmd" set APPPOOL $appPoolName /processModel.idleTimeout:0.00:00:00
答案 6 :(得分:0)
获取应用程序池配置(供参考)
$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:
答案 7 :(得分:0)
这里是完整的Powershell示例,显示了如何创建应用程序池(用于ASP.NET Core)并设置其许多值:
Import-Module WebAdministration
$appPoolName = "MyWebPool"
$appPoolFullName = "IIS:\AppPools\$appPoolName"
if(!(Test-Path $appPoolFullName)) {
New-WebAppPool $appPoolName -Force
Set-ItemProperty $appPoolFullName -Name managedPipelineMode -Value Integrated
Set-ItemProperty $appPoolFullName -Name managedRuntimeVersion -Value "" # means "No Managed Code"
Set-ItemProperty $appPoolFullName -Name startMode -Value AlwaysRunning
$3_days = New-TimeSpan -Days 3
Set-ItemProperty $appPoolFullName -Name processModel.idleTimeout -Value $3_days
Set-ItemProperty $appPoolFullName -Name processModel.identityType -Value NetworkService
Set-ItemProperty $appPoolFullName -Name processModel.idleTimeoutAction -Value Suspend
$zero_ts = New-TimeSpan
Set-ItemProperty $appPoolFullName -Name recycling.periodicRestart.time -Value $zero_ts
}