Подтвердить что ты не робот

Использование побитовых операторов Powershell

Я ищу пример того, как я разрешу следующий сценарий:

Представьте, что мой принтер имеет следующее свойство для "Статус"
0 -Офлайн
2-Paper Tray Empty

4 -Тонер исчерпан
8-Застревание бумаги

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

Спасибо

4b9b3361

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

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

Ответ 2

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

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