【问题标题】:Why/How is ManagedPipelineMode a different type when Getting vs Setting?为什么/如何在获取与设置时 ManagedPipelineMode 是不同的类型?
【发布时间】:2012-10-25 15:24:14
【问题描述】:

在尝试编写一些脚本来管理我们的 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-ItemPropertySet-ItemProperty 时类型似乎不同,或者我如何以某种方式查询它行为一致。

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

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

【问题讨论】:

    标签: iis powershell iis-7.5


    【解决方案1】:

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

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

    【讨论】:

    • 这没有回答问题。我知道该怎么做,我在问为什么 Get/Set 行为不同,以及我能做什么会表现相同(例如,所以我可以读取一个值并将其设置回来,而不知道这些值是什么)。
    【解决方案2】:

    尝试使用

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

    注意 Classic 中没有引号

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

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

    【讨论】:

    • 这仍然对我抱怨 -Value:Classic 不是 int32。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多