2015-08-13 29 views
0

我正在使用表示錯誤代碼的位掩碼。例如,值3(二進制11)表示遇到錯誤1和2(二進制1和10)。我正在尋找一個函數,可以在PowerShell中自動將它轉換爲一個數組。Powershell中的位掩碼轉換

我看了看周圍的互聯網,找不到任何特別的這種情況。我寫了一個這樣做的函數,但是如果用戶不熟悉位掩碼,那麼它就不是很好讀。

編輯具體而言,我正在尋找一個函數,它需要'原始'錯誤位,並使用它返回一個錯誤數組。例如:

GetErrorList 3779

返回包含數組:

1, 2, 64, 128, 512, 1024, 2048

回答

4

建立一個哈希表與翻譯每一位,並使用二進制AND運營商(-band)找出錯誤有已被提出:

function Get-ErrorDescription { 

    param([int]$ErrorBits) 

    $ErrorTable = @{ 
     0x01 = "Error1" 
     0x02 = "Error2" 
     0x04 = "Error3" 
     0x08 = "Error4" 
     0x10 = "Error5" 
     0x20 = "Error6" 
    } 

    foreach($ErrorCode in $ErrorTable.Keys | Sort-Object){ 
     if($ErrorBits -band $ErrorCode){ 
      $ErrorTable[$ErrorCode] 
     } 
    } 
} 

返回字符串a錯誤的rray發現,或$null

PS C:\> Get-ErrorDescription -ErrorBits 3 
Error1 
Error2 
+0

謝謝!用'-band'運算符實現的是我正在尋找的。 – Speerian

+0

您可以取出「-eq $ ErrorCode」。如果位不匹配,它將始終爲0. – js2010

+0

@ js2010真,好抓 –

1

編輯:我發現了一個非常酷的方式在PowerShell中5枚舉標誌來做到這一點:

[flags()] Enum ErrorTable 
{ 
    Error1 = 0x01 
    Error2 = 0x02 
    Error3 = 0x04 
    Error4 = 0x08 
    Error5 = 0x10 
    Error6 = 0x20 
} 

PS C:\> $errorcodes = [ErrorTable]'Error1,Error2' 
PS C:\> $errorcodes 
Error1, Error2 
PS C:\> $errorcodes = [ErrorTable]3 
PS C:\> $errorcodes 
Error1, Error2