2010-04-15 8 views
21

Je suis à la recherche par exemple de la façon dont je résoudre le scénario ci-dessous:Utilisation des opérateurs de manipulation de bits de Powershell

Imaginez mon imprimante a la propriété suivante pour « Statut »
0 -offline
2 -Papier Plateau vide
4 -Toner Épuisée
8 -Papier Jam

Quand je requête de l'état retourne une valeur de 12. Je peux voir évidemment que cela signifie que l'imprimante a le toner épuisé et un bourrage papier, mais comment pourrais-je travailler cette avec Powershell?

Merci

Répondre

34

Le booléen et l'opérateur au niveau du bit dans Powershell est -band.

Supposons que vous définissez vos valeurs et les descriptions dans un Hashtable, et ont la valeur de 12 à partir de l'imprimante:

$status = @{1 = "Offline" ; 2 = "Paper Tray Empty" ; 4 = "Toner Exhausted" ; 8 = "Paper Jam" } 
$value = 12 

Ensuite, cette déclaration vous donnera les descriptions textuelles:

$status.Keys | where { $_ -band $value } | foreach { $status.Get_Item($_) } 

Vous pourrait définir l'énumération dans Powershell, mais ce qui précède fonctionne tout aussi bien, and defining enums in Powershell seems like a lot of work.

Here is an article, qui explique comment utiliser les opérateurs bit à bit dans Powershell.

8

Vous pouvez laisser PowerShell faire plus de travail pour vous. Voici un exemple en utilisant System.IO.FileOptions:

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

Merci Keith, vous arrive de savoir s'il est possible d'énumérer les valeurs de l'attribut UserAccountControl pour un utilisateur dans AD? – fenster

+1

Si l'attribut est un attribut .NET alors oui. Vous avez juste besoin de spécifier le nom complet de [enun] :: GetValues ​​(). –