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

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

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

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

2 回答 2

3

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

Set-ItemProperty "IIS:\AppPools\MyAppPool" "managedPipelineMode" "1"
于 2016-05-16T20:55:40.613 回答
1

尝试使用

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

请注意 Classic 中缺少引号

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

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

于 2013-07-12T21:17:34.127 回答