Использование побитовых операторов Powershell - PullRequest
21 голосов
/ 15 апреля 2010

Я ищу пример того, как бы я решил сценарий ниже:

Представьте, что мой принтер имеет следующее свойство для "Статус"
0 -Offline
2-лоток для бумаги пустой
4-тонер исчерпан
8-Бумажное варенье

Когда я запрашиваю статус, он возвращает значение 12. Я, очевидно, вижу, что это означает, что в принтере есть тонер и бумага застряли, но как мне решить эту проблему с Powershell?

Спасибо

Ответы [ 2 ]

36 голосов
/ 15 апреля 2010

Битовое логическое значение и оператор в 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, но вышеприведенное работает точно так же, и определение перечислений в Powershell кажется большой работой .

Вот статья , в которой рассказывается, как использовать побитовые операторы в Powershell.

8 голосов
/ 15 апреля 2010

Вы можете позволить PowerShell выполнять больше работы за вас. Вот пример использования System.IO.FileOptions:

PS> [enum]::GetValues([io.fileoptions]) | ?{$_.value__ -band 0x90000000}
RandomAccess
WriteThrough
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...