为什么/如何在获取vs设置时ManagedPipelineMode是一个不同的类型?

时间:2012-10-25 15:24:14

标签: iis powershell iis-7.5

在尝试编写一些脚本来管理我们的IIS站点时,我发现了IIS中的ManagedPipelineMode的一些奇怪行为。我的代码相当通用,并使用Get-ItemProperty读取旧值,然后使用Set-ItemProperty来更新它,如果它不是我们想要的值。

但是,如果我运行它:

Get-ItemProperty "IIS:\AppPools\MyAppPool" "managedPipelineMode"

我找回字符串 Classic。但是,如果我运行这个:

Set-ItemProperty "IIS:\AppPools\MyAppPool" "managedPipelineMode" "Classic"

我收回错误Classic is not a valid value for Int32

所以,我知道我可以使用([int][Microsoft.Web.Administration.ManagedPipelineMode]::Classic)设置值,但我不明白为什么使用Get-ItemProperty vs Set-ItemProperty时类型似乎有所不同,或者我怎么做以一致行为的方式查询。

注意:我真的不想为ManagedPipelineMode添加特殊情况,因为其他所有属性似乎都按预期运行。所以,有两个问题:

  1. 这种奇怪的行为是什么,允许属性在读取时为string,但在设置时为int?这是所有枚举的情况吗?
  2. 有没有办法使用相同的类型读取/写入此属性,因此我可以编写能够读取值的代码,检查它是否是我们想要的,如果不是,请更新它?

2 个答案:

答案 0 :(得分:3)

使用以下值:0 =集成; 1 =经典

Set-ItemProperty "IIS:\AppPools\MyAppPool" "managedPipelineMode" "1"

答案 1 :(得分:0)

尝试使用

Set-ItemProperty -Path:'IIS\AppPools\MyAppPool' -Name:'managedPipelineMode' -Value:Classic

请注意Classic

上缺少引号

注意: 我更喜欢专门调用参数名称,以便以后不会混淆,如果他们更新/更改命令,那么奇怪的东西就不会发生

我也使用冒号绑定操作符。这清楚地表明该值属于该名称的参数。