Я хочу отключить время простоя (установить его в ноль) пула приложений, и я хочу сделать это во время установки, возможно ли выполнить это действие из С# или PowerShell?
в С#/Powershell - Можно ли изменить время простоя для пула приложений IIS?
Ответ 1
Это script, который я решил использовать:
$myApplicationPool = Get-WmiObject -Class IISApplicationPoolSetting -Namespace "root\microsoftiisv2" | Where-Object {$_.Name -eq 'W3SVC/APPPOOLS/DefaultAppPool'}
$myApplicationPool.IdleTimeout=0
$myApplicationPool.Put()
Если у кого-то есть лучший подход, пожалуйста, дайте мне знать.
Надеюсь, что это поможет кому-то
С уважением.
Ответ 2
Если вы используете PowerShell 2 или более позднюю версию, у вас должен быть доступ к Set-ItemProperty. Вы также захотите загрузить модуль WebAdministration.
Затем вы можете сделать (пример взято из здесь)
Set-ItemProperty ("IIS:\AppPools\$name") -Name processModel.idleTimeout -value ( [TimeSpan]::FromMinutes(0))
и убедитесь, что значение было изменено с помощью
Get-ItemProperty ("IIS:\AppPools\$name") -Name processModel.idleTimeout.value
Ответ 3
@R0MANARMY ответ (в настоящее время самый популярный) не работает для меня. Он работает нормально, но последующая проверка показывает, что время простоя не изменилось.
На основании этого сообщения в блоге этот ответ изменяет копию объекта в памяти. Я изменил пример кода в ответе R0MANARMY следующим образом:
Get-ChildItem IIS:\AppPools\$name | ForEach { $_.processModel.IdleTimeout = [TimeSpan]::FromMinutes(0); $_ | Set-Item; }
Ответ 4
%windir%\system32\inetsrv\appcmd set config -section:applicationPools
-applicationPoolDefaults.processModel.idleTimeout:00:00:00
Ответ 5
Я использую следующую функцию для общего захвата объекта пула приложений:
$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, чтобы узнать, какие свойства имеет ваш пул $, а затем используйте Set-WMIInstance для их изменения.
Ответ 6
При использовании powershell используйте следующее:
$appPoolName = "xxxAppPool"
&"$env:windir\system32\inetsrv\appcmd" set APPPOOL $appPoolName /processModel.idleTimeout:0.00:00:00
Ответ 7
Получить конфигурацию пула приложений (для справки)
$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:
Ответ 8
Вот полный пример 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
}