Iis 获取vs设置时,ManagedPipelineMode为什么/如何成为不同的类型?

Iis 获取vs设置时,ManagedPipelineMode为什么/如何成为不同的类型?,iis,powershell,iis-7.5,Iis,Powershell,Iis 7.5,在尝试编写一些脚本来管理IIS站点时,我在IIS中遇到了ManagedPipelineMode的一些奇怪行为。我的代码相当通用,使用Get-ItemProperty读取旧值,然后设置ItemProperty以更新它(如果它不是我们想要的值) 但是,如果我运行以下命令: Get-ItemProperty "IIS:\AppPools\MyAppPool" "managedPipelineMode" Set-ItemProperty "IIS:\AppPools\MyAppPool" "manag

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

但是,如果我运行以下命令:

Get-ItemProperty "IIS:\AppPools\MyAppPool" "managedPipelineMode"
Set-ItemProperty "IIS:\AppPools\MyAppPool" "managedPipelineMode" "Classic"
我取回字符串
Classic
。但是,如果我运行以下命令:

Get-ItemProperty "IIS:\AppPools\MyAppPool" "managedPipelineMode"
Set-ItemProperty "IIS:\AppPools\MyAppPool" "managedPipelineMode" "Classic"
我发现错误
Classic不是Int32的有效值

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

注意:我真的不想为ManagedPipelineMode设置一个特例,因为其他所有属性的行为似乎都与预期的一样。因此,有两个问题:

  • 这种奇怪的行为是什么,允许属性在读取时为
    string
    ,但在设置时为
    int
    ?所有枚举都是这样吗
  • 是否有任何方法可以使用相同的类型读取/写入此属性,以便我可以编写能够读取该值的代码,检查它是否符合我们的要求,如果不是,则更新它
  • 试用

    Set-ItemProperty -Path:'IIS\AppPools\MyAppPool' -Name:'managedPipelineMode' -Value:Classic
    
    请注意Classic上缺少引号

    注: 我更喜欢专门调用参数名,这样以后就不会出现混淆,如果它们更新/更改命令,wierd之类的事情就不会发生


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

    使用以下值:0=积分;1=经典

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

    这仍然让我抱怨
    -Value:Classic
    不是int32。这并不能回答问题。我知道怎么做,我在问为什么Get/Set的行为会不同,我能做什么才能表现相同(例如,我可以读取一个值并将其设置回,而不知道这些值是什么)。