web-dev-qa-db-ja.com

Powershellのビット演算子を使用する

以下のシナリオをどのように解決するかの例を探しています。

私のプリンターが「ステータス」の次のプロパティを持っていると想像してください
0-オフライン
2-用紙トレイが空です
4-トナーがなくなりました
8-紙詰まり

ステータスを照会すると、値12が返されます。これは、プリンターにトナーがなくなって紙詰まりが発生していることを明らかに示していますが、Powershellでこれをどのように解決しますか?

ありがとう

22
fenster

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でビット演算子を使用する方法について説明しています。

39
driis

PowerShellにもっと多くの作業を任せることができます。 System.IO.FileOptionsを使用した例を次に示します。

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