0

定义函数时,如何引用自定义枚举?

这是我正在尝试的:

Add-Type -TypeDefinition @"
   namespace JB
   {
       public enum InternetZones
       {
          Computer
          ,LocalIntranet
          ,TrustedSites
          ,Internet
          ,RestrictedSites
       }
   }
"@ -Language CSharpVersion3

function Get-InternetZoneLogonMode
{
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory=$true)]   
        [JB.InterfaceZones]$zone
    )
    [string]$regpath = ("HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\{0}" -f [int]$zone)
    $regpath
    #...
    #Get-PropertyValue 
}

Get-InternetZoneLogonMode -zone [JB.InternetZones]::TrustedSites

但这给出了错误:

Get-ZoneLogonMode : Unable to find type [JB.InterfaceZones]. Make sure that the assembly that contains this type is loaded.
At line:29 char:1
+ Get-ZoneLogonMode -zone [JB.InternetZones]::TrustedSites
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (JB.InterfaceZones:TypeName) [], RuntimeException
    + FullyQualifiedErrorId : TypeNotFound

注意:我知道我可以使用ValidateSet类似的功能;然而,它的缺点是只有一个名称值;而不是允许我使用友好名称进行编程,然后将其映射到后台的整数(我可以为此编写代码;但如果可能的话,枚举似乎更合适)。

我正在使用 Powershell v4,但理想情况下,我想要一个 PowerShell v2 兼容的解决方案,因为大多数用户默认使用该版本。

更新

我已经纠正了错字(感谢 PetSerAl;很好发现)。 [JB.InterfaceZones]$zone现在改为[JB.InternetZones]$zone. 现在我看到错误:

Get-InternetZoneLogonMode : Cannot process argument transformation on parameter 'zone'. Cannot convert value "[JB.InternetZones]::TrustedSites" to type 
"JB.InternetZones". Error: "Unable to match the identifier name [JB.InternetZones]::TrustedSites to a valid enumerator name.  Specify one of the following 
enumerator names and try again: Computer, LocalIntranet, TrustedSites, Internet, RestrictedSites"
At line:80 char:33
+ Get-InternetZoneLogonMode -zone [JB.InternetZones]::TrustedSites
+                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-InternetZoneLogonMode], ParameterBindingArgumentTransformationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-InternetZoneLogonMode
4

2 回答 2

3

ISE 把这个送给了我,但你尝试的语法并不完全不正确。我能够做到这一点并让它发挥作用。

Get-InternetZoneLogonMode -Zone ([JB.InternetZones]::TrustedSites)

同样,如果您查看突出显示的内容,您会看到我是如何得出这个结论的。

语法高亮

于 2015-03-13T13:27:50.050 回答
0

根据 PetSerAl 和 CB 的评论:

  • 更正了函数定义中的错字

    • [JB.InterfaceZones]$zone
    • [JB.InternetZones]$zone
  • 改变函数调用

    • Get-InternetZoneLogonMode -zone [JB.InternetZones]::TrustedSites
    • Get-InternetZoneLogonMode -zone TrustedSites
于 2015-03-13T12:44:08.177 回答