我正在构建脚本来设置 octopus 的 startMode 和idleTimeoutAction。我的脚本正确地更改了 startMode,但我不断收到idleTimeoutAction 错误。有人可以帮助我吗?
这是我收到的错误:
在“APPSWDEV01”上执行脚本设置 LeadsAPI 属性 startMode 到 AlwaysRunning 旧值 AlwaysRunning 新值 AlwaysRunning 完成
将 LeadsAPI 属性idleTimeoutAction 设置为 Suspend System.ArgumentException:找不到属性(“idleTimeoutAction”) 在 \APPSWDEV01\AppPools\LeadsAPI 上。参数名称: 提供者特定选择列表位于 Microsoft.IIs.PowerShell.Provider.ConfigurationProvider.GetProperty(字符串 路径,Collection`1providerSpecificPickList)出现问题 设置属性
# Running outside octopus
param(
[string]$APIName,
[switch]$whatIf
)
$ErrorActionPreference = "Stop"
function Get-Param($Name, [switch]$Required, $Default) {
$result = $null
if ($OctopusParameters -ne $null) {
$result = $OctopusParameters[$Name]
}
if ($result -eq $null) {
$variable = Get-Variable $Name -EA SilentlyContinue
if ($variable -ne $null) {
$result = $variable.Value
}
}
if ($result -eq $null -or $result -eq "") {
if ($Required) {
throw "Missing parameter value $Name"
} else {
$result = $Default
}
}
return $result
}
& {
param(
[string]$APIName
)
if (![string]::IsNullOrEmpty($APIName))
{
Write-Host "Setting $APIName property startMode to AlwaysRunning"
try {
Add-PSSnapin WebAdministration -ErrorAction SilentlyContinue
Import-Module WebAdministration -ErrorAction SilentlyContinue
$oldValue = Get-ItemProperty "IIS:\AppPools\$APIName" -Name "startMode"
$oldValueString = ""
if ($oldValue.GetType() -eq [Microsoft.IIs.PowerShell.Framework.ConfigurationAttribute])
{
$oldValueString = ($oldValue | Select-Object -ExpandProperty "Value");
}
else
{
$oldValueString = $oldValue
}
Write-Host "Old value $oldValueString"
Set-ItemProperty "IIS:\AppPools\$APIName" -Name "startMode" -Value "AlwaysRunning"
Write-Host "New value AlwaysRunning"
Write-Host "Done"
} catch {
Write-Host $_.Exception|format-list -force
Write-Host "There was a problem setting property"
}
Write-Host "Setting $APIName property idleTimeoutAction to Suspend"
try {
Add-PSSnapin WebAdministration -ErrorAction SilentlyContinue
Import-Module WebAdministration -ErrorAction SilentlyContinue
$oldValue = Get-ItemProperty "IIS:\AppPools\$APIName" -Name "idleTimeoutAction"
$oldValueString = ""
if ($oldValue.GetType() -eq [Microsoft.IIs.PowerShell.Framework.ConfigurationAttribute])
{
$oldValueString = ($oldValue | Select-Object -ExpandProperty "Value");
}
else
{
$oldValueString = $oldValue
}
Write-Host "Old value $oldValueString"
Set-ItemProperty "IIS:\AppPools\$APIName" -Name "idleTimeoutAction" -Value "Suspend"
Write-Host "New value Suspend"
Write-Host "Done"
} catch {
Write-Host $_.Exception|format-list -force
Write-Host "There was a problem setting property"
}
}
} `
(Get-Param 'APIName' -Required)
我查看了包含应用程序池设置的文件
C:\Windows\System32\inetsrv\config\applicationHost.config
。当在应用程序池上手动配置 idleTimeoutAction
时,结果是如下条目:
<add name="MyAppPool" managedRuntimeVersion="v4.0">
<processModel idleTimeoutAction="Suspend" />
</add>
在 PowerShell 中,您可以通过以下命令访问
idleTimeoutAction
属性:
Get-ItemProperty "IIS:\AppPools\MyAppPool" -Name processModel.idleTimeoutAction
同样,您可以通过以下方式设置
idleTimeoutAction
属性:
Set-ItemProperty "IIS:\AppPools\MyAppPool" -Name processModel.idleTimeoutAction -Value "Suspend"
希望这有帮助。
现在有一个名为 IIS App - Update Property 的社区步骤模板,您可以使用它来设置
processModel.idleTimeoutAction
值。
您还可以通过添加另一个针对
processModel.idleTimeout
的步骤来设置超时本身,并将其设置为新值,例如 01:00:00
,而不是默认的 00:20:00
。