使用powershell管理单元配置IIS时如何在powershell中使用枚举类型

sof*_*eda 9 powershell iis-7

我正在使用IIS Powershell管理单元从头开始配置新的Web应用程序.我是PS的新手.由于PS无法识别ManagedPipelineMode枚举,因此以下脚本无法正常工作.如果我将值更改为0,它将起作用.我怎样才能让PS理解这一点.我尝试了Add-Type cmdlet并且还加载了Microsoft.Web.Administration程序集而没有任何成功,现在注释了这些行.

如何让这个PS脚本与枚举一起使用?

#Add-Type -AssemblyName Microsoft.Web.Administration
#[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")
Import-Module WebAdministration

$AppPoolName = 'Test AppPool'

if ((Test-Path IIS:\apppools\$AppPoolName) -eq $false) {
    Write-Output 'Creating new app pool ...'
    New-WebAppPool -Name $AppPoolName
    $AppPool = Get-ChildItem iis:\apppools | where { $_.Name -eq $AppPoolName}
    $AppPool.Stop()
    $AppPool | Set-ItemProperty -Name "managedRuntimeVersion" -Value "v4.0"
    $AppPool | Set-ItemProperty -Name "managedPipelineMode" -Value [Microsoft.Web.Administration.ManagedPipelineMode]::Integrated
    $AppPool.Start()

}
Run Code Online (Sandbox Code Playgroud)

错误消息是:

Set-ItemProperty:[Microsoft.Web.Administration.ManagedPipelineMode] :: Integrated不是Int32的有效值.

man*_*lds 11

它期望一个整数,即使底层属性是类型ManagaedPipelineMode.你可以在下面做:

$AppPool | Set-ItemProperty -Name "managedPipelineMode" -Value ([int] [Microsoft.Web.Administration.ManagedPipelineMode]::Classic)
Run Code Online (Sandbox Code Playgroud)

PS:

代替

$AppPool = Get-ChildItem iis:\apppools | where { $_.Name -eq $AppPoolName}
Run Code Online (Sandbox Code Playgroud)

你可以做:

$AppPool = Get-Item iis:\apppools\$AppPoolName
Run Code Online (Sandbox Code Playgroud)