从章鱼

时间:2018-02-14 22:59:34

标签: powershell octopus-deploy iis-10

我正在构建脚本以从章鱼中设置startMode和idleTimeoutAction。我的脚本正在正确地更改startMode,但我一直在使用idleTimeoutAction出错。有人能帮助我吗?

以下是我得到的错误:

  

在' APPSWDEV01'上执行脚本设置LeadsAPI属性startMode   to AlwaysRunning旧值AlwaysRunning新值AlwaysRunning完成

     

将LeadsAPI属性idleTimeoutAction设置为Suspend   System.ArgumentException:找不到属性(" idleTimeoutAction")   on \ APPSWDEV01 \ AppPools \ LeadsAPI。参数名称:   providerSpecificPickList at   Microsoft.IIs.PowerShell.Provider.ConfigurationProvider.GetProperty(字符串   path,Collection`1 providerSpecificPickList)出现了问题   设置属性

# 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)

1 个答案:

答案 0 :(得分:1)

我查看了包含应用程序池设置的文件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"

希望这有帮助。

相关问题