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

Dan*_*eny 5 iis powershell iis-7.5

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

但是,如果我运行这个:

Get-ItemProperty "IIS:\AppPools\MyAppPool" "managedPipelineMode"
Run Code Online (Sandbox Code Playgroud)

我收回了字符串 Classic.但是,如果我运行这个:

Set-ItemProperty "IIS:\AppPools\MyAppPool" "managedPipelineMode" "Classic"
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Eri*_*ris 1

尝试使用

Set-ItemProperty -Path:'IIS\AppPools\MyAppPool' -Name:'managedPipelineMode' -Value:Classic
Run Code Online (Sandbox Code Playgroud)

请注意 Classic 上缺少引号

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

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