如何为自定义PowerShell [enum]
创建(最好在PowerShell中)类型转换器?
PowerShell相关问题:enum <enum-name>
should ConvertFrom [string]
基于[Access]
的具体示例How to define a type of a bit-combination?:
[Flags()] enum Access {
Execute = 1
Write = 2
Read = 4
}
我正在尝试构建一个[Access]
ConvertFrom
转换器:
class AccessConverter : System.Management.Automation.PSTypeConverter
{
[bool] CanConvertFrom([object]$sourceValue, [Type]$destinationType) {
return $sourceValue -eq [string]
}
[object] ConvertFrom([object]$sourceValue, [Type]$destinationType, [IFormatProvider]$formatProvider, [bool]$ignoreCase) {
if ($sourceValue -eq [string]) { return [Access]$SourceValue }
else { throw [NotImplementedException]::new() }
}
[bool] CanConvertTo([object]$sourceValue, [Type]$destinationType) {
return $false
}
[object] ConvertTo([object]$sourceValue, [Type]$destinationType, [IFormatProvider]$formatProvider, [bool]$ignoreCase) {
throw [NotImplementedException]::new()
}
}
Update-TypeData -TypeName Access -TypeConverter AccessConverter
但这并不像预期的那样工作:
$Access.HasFlag('read, write')
方法异常:无法转换参数“flag”,其值为:“read,write”,对于“HasFlag”键入“System.Enum”:无法将值“read,write”转换为类型“System.enum”。错误:“无法对ContainsGenericParameters为true的类型或方法执行后期绑定操作。"”
或者是因为HasFlag
期望的是一个通用的enumType
类型,而不是特定的自定义(“access
“)enum
?
1条答案
按热度按时间9jyewag01#
不确定这是否适用于
PSTypeConverter
,或者它是否与之相关,在我看来,你想要完成的事情可以通过使用一个类型转换的脚本方法覆盖enum
中的.HasFlag
方法来实现: