使用Powershell的按位运算符

fen*_*ter 21 powershell bit-manipulation

我正在寻找如何解决下面方案的示例:

想象一下,我的打印机具有"状态"的以下属性
0 - 离线
2 - 纸盘空
4 - 墨水耗尽
8纸张卡纸

当我查询状态时,它返回值12.我可以清楚地看到这意味着打印机有墨粉耗尽和卡纸,但我如何使用Powershell解决这个问题?

谢谢

dri*_*iis 37

Powershell中的boolean bitwise和运算符是-band.

假设您在哈希表中定义了值和描述,并且打印机的值为12:

 $status = @{1 = "Offline" ; 2 = "Paper Tray Empty" ; 4 = "Toner Exhausted" ; 8 = "Paper Jam" }
 $value = 12
Run Code Online (Sandbox Code Playgroud)

然后,本声明将为您提供文字说明:

$status.Keys | where { $_ -band $value } | foreach { $status.Get_Item($_) }
Run Code Online (Sandbox Code Playgroud)

可以在Powershell中定义枚举,但上面的工作也一样,在Powershell中定义枚举似乎很多工作.

这篇文章讨论了如何在Powershell中使用按位运算符.


Kei*_*ill 8

您可以让PowerShell为您完成更多工作.这是使用System.IO.FileOptions的示例:

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

  • 如果该属性是 .NET 属性,则是。您只需要为 [enun]::GetValues() 指定完整的类型名。 (2认同)