【发布时间】:2016-06-02 01:18:34
【问题描述】:
我正在使用 PowerShell 和 IIS,并在 PowerShell 选择表示类型的方式上遇到了一些有趣的问题。
如果我跑了
Import-Module -Force WebAdministration
Get-ItemProperty -Path "IIS:\AppPools\DefaultAppPool" -Name "managedPipelineMode"
它会尽职尽责地打印出来
Integrated
但如果我尝试将该属性设置为
Set-ItemProperty -Path "IIS:\AppPools\DefaultAppPool" -Name "managedPipelineMode" -Value "Integrated"
我得到了例外:Set-ItemProperty : Integratedis not a valid value for Int32.。很公平。我从谷歌上知道这种类型实际上是一个 Microsoft.Web.Administration.ManagedPipelineMode 枚举,所以我需要做这样的事情才能让它工作:
Add-Type -Path C:\Windows\system32\inetsrv\Microsoft.Web.Administration.dll
$t = [Type]"Microsoft.Web.Administration.ManagedPipelineMode"
Set-ItemProperty -Path "IIS:\AppPools\DefaultAppPool" -Name "managedPipelineMode" -Value ([int]("Integrated" -As $t))
这很公平,但我的问题是:如何在不使用 Google 的情况下确定属性的枚举类型?
PowerShell 确信该属性是一个字符串:
(Get-ItemProperty -Path "IIS:\AppPools\DefaultAppPool" -Name "managedPipelineMode").GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
或者有时它认为它是一个由字符串支持的 NoteProperty:
(Get-Item "IIS:\AppPools\DefaultAppPool") | Get-Member -Name "startMode"
TypeName: Microsoft.IIs.PowerShell.Framework.ConfigurationElement#system.applicationHost/applicationPools#add
Name MemberType Definition
---- ---------- ----------
startMode NoteProperty System.String startMode=OnDemand
但我不知道如何获取实际的枚举类型。如果我能做到这一点,我可以更加灵活地将值写入这些属性。就目前而言,我必须确保每次设置这些属性之一时,我都必须花时间在 Google 上(这是假设我什至可以找到正确的枚举类型;有些更难追踪)。
【问题讨论】:
标签: powershell iis