При определении функции, как вы можете ссылаться на пользовательское перечисление?Как передать пользовательское перечисление функции в powershell
Вот что я хочу:
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
NB: Я знаю, я мог бы использовать ValidateSet
для подобной функциональности; однако имеет тот недостаток, что имеет только значение имени; в отличие от того, чтобы позволить мне программировать, используя дружественные имена, которые затем отображаются в ints в фоновом режиме (я мог бы написать код для этого, но перечисление представляется более подходящим, если это возможно).
Я использую Powershell v4, но в идеале я бы хотел использовать совместимое с PowerShell v2 решение, так как большинство пользователей на этой версии по умолчанию.
Update
Я исправил опечатку (спасибо 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
Ваша функция объявляет '$ zone' как' [JB.InterfaceZones] 'не как' [JB.InternetZones] '. – PetSerAl
Doh! Спасибо - хотя все еще получаю сообщение об ошибке (обновление сообщения) – JohnLBevan
просто вызывайте его так: 'Get-InternetZoneLogonMode -zone TrustedSites' –