【发布时间】:2018-04-27 01:42:35
【问题描述】:
我正在寻找如何解决以下场景的示例:
假设我的打印机具有以下“状态”属性
0 - 离线
2 -纸盘空
4 -碳粉用完
8 - 卡纸
当我查询状态时,它返回值 12。我可以清楚地看到这意味着打印机的碳粉用尽和卡纸,但是我如何使用 Powershell 解决这个问题?
谢谢
【问题讨论】:
标签: powershell bit-manipulation
我正在寻找如何解决以下场景的示例:
假设我的打印机具有以下“状态”属性
0 - 离线
2 -纸盘空
4 -碳粉用完
8 - 卡纸
当我查询状态时,它返回值 12。我可以清楚地看到这意味着打印机的碳粉用尽和卡纸,但是我如何使用 Powershell 解决这个问题?
谢谢
【问题讨论】:
标签: powershell bit-manipulation
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 中使用位运算符。
【讨论】:
您可以让 PowerShell 为您完成更多工作。下面是一个使用 System.IO.FileOptions 的示例:
PS> [enum]::GetValues([io.fileoptions]) | ?{$_.value__ -band 0x90000000}
RandomAccess
WriteThrough
【讨论】: