【问题标题】:Using Powershell's bitwise operators使用 Powershell 的位运算符
【发布时间】:2018-04-27 01:42:35
【问题描述】:

我正在寻找如何解决以下场景的示例:

假设我的打印机具有以下“状态”属性
0 - 离线
2 -纸盘空
4 -碳粉用完
8 - 卡纸

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

谢谢

【问题讨论】:

    标签: powershell bit-manipulation


    【解决方案1】:

    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岁答案的谬误......)
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢 Keith,您是否知道是否可以枚举 AD 中用户的 UserAccountControl 属性的值?
    • 如果属性是 .NET 属性,则可以。您只需为 [enun]::GetValues() 指定完整的类型名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多