Iis 获取vs设置时,ManagedPipelineMode为什么/如何成为不同的类型?
在尝试编写一些脚本来管理IIS站点时,我在IIS中遇到了ManagedPipelineMode的一些奇怪行为。我的代码相当通用,使用Get-ItemProperty读取旧值,然后设置ItemProperty以更新它(如果它不是我们想要的值) 但是,如果我运行以下命令: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
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的行为会不同,我能做什么才能表现相同(例如,我可以读取一个值并将其设置回,而不知道这些值是什么)。