2010-04-15 22 views
21

我期待例如我将如何解决以下场景:使用PowerShell的位运算符

想象一下,我的打印机具有以下属性的“状态”
0 -offline
2 - 纸托盘空
4 - 色调剂用尽
8 -Paper果酱

当我查询状态则返回12的值,我可以明显的看出,这意味着打印机碳粉用尽,卡纸,但我是如何工作的这与Powershell?

感谢

回答

34

布尔按位和操作员在PowerShell是-band

假设你在哈希表中定义的值和描述,并从打印机有12个值:

$status = @{1 = "Offline" ; 2 = "Paper Tray Empty" ; 4 = "Toner Exhausted" ; 8 = "Paper Jam" } 
$value = 12 

那么,这种说法会给你的文字描述:

$status.Keys | where { $_ -band $value } | foreach { $status.Get_Item($_) } 

可能定义在Powershell中的枚举,但上面的作品也是如此,and defining enums in Powershell seems like a lot of work

Here is an article,说明如何在Powershell中使用按位运算符。

8

您可以让PowerShell为您完成更多工作。下面是使用System.IO.FileOptions一个例子:

PS> [enum]::GetValues([io.fileoptions]) | ?{$_.value__ -band 0x90000000} 
RandomAccess 
WriteThrough 
+0

感谢基思,你碰巧知道是否有可能枚举UserAccountControl属性的值在AD用户? – fenster 2010-04-22 16:27:52

+1

如果该属性是.NET属性,那么是。你只需要为[enun] :: GetValues()指定完整的类型名。 – 2010-04-27 19:39:11