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

时间:2011-11-02 22:52:33

标签: iis-7 powershell

我正在使用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()

}

错误消息是:

  

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

3 个答案:

答案 0 :(得分:11)

即使基础属性的类型为ManagaedPipelineMode,也需要一个整数。你可以在下面做:

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

PS:

而不是

$AppPool = Get-ChildItem iis:\apppools | where { $_.Name -eq $AppPoolName}

你可以这样做:

$AppPool = Get-Item iis:\apppools\$AppPoolName

答案 1 :(得分:2)

关于:Add-Type -AssemblyName - 这仅适用于PowwerShell知道的一组固定装配。您必须在文件系统中找到程序集并使用-Path参数。这在我的系统上运行在64位PowerShell控制台中:

Add-Type -Path C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll

答案 2 :(得分:0)

而不是使用:

$AppPool | Set-ItemProperty -Name "managedPipelineMode" `
   -Value [Microsoft.Web.Administration.ManagedPipelineMode]::Integrated

使用:

$AppPool | Set-ItemProperty -Name "managedPipelineMode" `
   -Value ([Microsoft.Web.Administration.ManagedPipelineMode]::Integrated)

或更简洁:

$AppPool | Set-ItemProperty -Name "managedPipelineMode" -Value Integrated

为什么呢?你在第一个答案中需要括号的原因是因为参数binder在你的尝试中将整个[Microsoft.Web.Administration.ManagedPipelineMode]::Integrated视为一个字符串,不能转换为该枚举类型。但是,Integrated可以是枚举。通过将其包装在括号中,它将再次作为表达式进行评估,并被视为完整类型文字。