2013-05-02 27 views
1

PowerShell的枚舉值鑑於我目前的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) 
    } 
"@ 

**編輯**

改變了聲明:

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 
+0

你什麼錯誤? – EBGreen 2013-05-02 16:43:37

+0

'InvalidData:(:) [Add-Type],InvalidOperationException' – craig 2013-05-02 16:49:25

回答

4

試試這個:

Add-Type -TypeDefinition @" 
    [System.Flags] 
    public enum FlagsEnum { 
    None = 0, 
    SummaryInfo = 1, 
    ReportOptions = 2, 
    ParameterFields = 4, 
    All = (SummaryInfo | ReportOptions | ParameterFields) 
    } 
"@ 

請記住,這裏的文檔,你沒有真正寫PowerShell中,你寫C#裏面。基於從原來的問題

,目前正在顯示指出,該型已經存在的實際誤差的提問者評論爲後人

編輯。這是因爲早期版本的代碼已在相同的PowerShell會話中運行。 PowerShell的一個不幸的限制是你不能添加一個類型,調整它,然後重新添加它(這使得開發腳本定義自己的類型變得很痛苦)。

+0

+1:我應該說我的問題更好。 – craig 2013-05-02 18:16:46

+0

您建議的語法確實有效,但是我得到'FlagsEnum'類型名'已存在'錯誤。思考? – craig 2013-05-02 18:21:53

+2

您得到「已存在錯誤」的原因是因爲該類型已存在於PowerShell會話中。嘗試在新窗口中運行它 – 2013-05-02 19:04:51

3

你定義一個C#枚舉所以用C#運營商例如爲:

All = SummaryInfo | ReportOptions | ParameterFields