PowerShell枚举值,表示所有
本文关键字:表示 枚举 PowerShell | 更新日期: 2023-09-27 18:11:56
给定我当前的enum
:
Add-Type -TypeDefinition @"
[System.Flags]
public enum FlagsEnum {
None = 0,
SummaryInfo = 1,
ReportOptions = 2,
ParameterFields = 4
}
"@
是否有一种方法可以创建一个将所有位设置为1的条目?这个语法会导致错误:
Add-Type -TypeDefinition @"
[System.Flags]
public enum FlagsEnum {
None = 0,
SummaryInfo = 1,
ReportOptions = 2,
ParameterFields = 4,
All = (SummaryInfo -bor ReportOptions -bor ParameterFields)
}
"@
** edit **
更改了声明:
Add-Type -TypeDefinition @"
[System.Flags]
public enum FlagsEnum {
None = 0,
SummaryInfo = 1,
ReportOptions = 2,
ParameterFields = 4,
All = (SummaryInfo | ReportOptions | ParameterFields)
}
"@
代码:
$flags = [FlagsEnum]::All
if ( $flags -band [FlagsEnum]::SummaryInfo ) { write-host "add SummaryInfo" }
if ( $flags -band [FlagsEnum]::ReportOptions ) { write-host "add ReportOptions" }
if ( $flags -band [FlagsEnum]::ParameterFields ) { write-host "add ParameterFields" }
结果:
Add-Type : Cannot add type. The type name 'FlagsEnum' already exists.
At C:'Documents and Settings'xxx'My Documents'WindowsPowerShell'Scripts'enums.ps1:3 char:9
+ Add-Type <<<< -TypeDefinition @"
+ CategoryInfo : InvalidOperation: (FlagsEnum:String) [Add-Type], Exception
+ FullyQualifiedErrorId : TYPE_ALREADY_EXISTS,Microsoft.PowerShell.Commands.AddTypeCommand
试试这个:
Add-Type -TypeDefinition @"
[System.Flags]
public enum FlagsEnum {
None = 0,
SummaryInfo = 1,
ReportOptions = 2,
ParameterFields = 4,
All = (SummaryInfo | ReportOptions | ParameterFields)
}
"@
请记住,在这里的文档中,你并不是在写PowerShell,而是在写c#。
根据原问题提问者的评论为后人编辑
显示的实际错误表明该类型已经存在。这是因为代码的早期版本已经在同一个PowerShell会话中运行。PowerShell的一个不幸的限制是你不能添加一个类型,调整它,然后重新添加它(这使得开发脚本定义自己的类型很痛苦)。
你定义了一个c#枚举,所以使用c#操作符,例如:
All = SummaryInfo | ReportOptions | ParameterFields