La principale différence entre les deux est que la première commande n'implique pas une comparaison directe des valeurs pour obtenir tous les résultats, et la deuxième commande le fait. La première commande inclut les résultats NULL et la seconde non (comme MDMarra l'a déjà découvert). Les deux commandes commencent par cette applet de commande:
get-aduser
Lorsque vous parcourez les étapes ci-dessous, n'oubliez pas que les résultats de cette applet de commande incluent tous les utilisateurs AD indépendamment de toute autre chose dans le -filter
paramètre suivant.
Maintenant, décomposons les deux parties qui sont différentes. Le premier:
{-not (description -eq "auto")}
...veux dire
- "déterminer où l'attribut de description est égal à la chaîne de texte" auto ". Pour que cette comparaison fonctionne, une chaîne doit exister dans le champ de description pour que l'
-eq
opérateur puisse la comparer à" auto ". Les valeurs NULL sont supprimées de cette comparaison car il ne peut pas comparer un NULL à une valeur de chaîne.
- indépendamment du
-eq
le paramètre de filtre me donne TOUT ce qui N'EST PAS le résultat de (description -eq "auto")
, qui inclura des NULLs, car l'applet de commande d'origine,, get-aduser
inclut tous les utilisateurs AD. Il n'a pas eu à comparer quoi que ce soit à l' -not
opérateur avec l' opérateur. Il vous a juste donné tout en plus des résultats du (description -eq "auto")
filtre.
Dans votre exemple, supposons que vous ayez 1 utilisateur AD dont la description est égale à "auto", quelques centaines avec autre chose que "auto" et quelques centaines avec des descriptions NULL. En parcourant la logique de commande, il fera:
- Donnez-moi tous les utilisateurs AD (get-aduser) où la description est égale à "auto" - résulte en 1 utilisateur
- Donnez-moi tous les utilisateurs AD qui ne sont PAS ce que vous venez de me donner - le résultat est les quelques centaines avec quelque chose d'autre ET les quelques centaines qui ont NULL.
Comme il n'a pas eu à comparer quoi que ce soit à quoi que ce soit d'autre à l'aide de l' -not
opérateur, le résultat inclut les utilisateurs de description NULL qui ont été capturés dans l' get-aduser
applet de commande d' origine .
La deuxième commande:
{description -ne "auto"}
...veux dire
- "déterminer où l'attribut de description n'est pas égal à la chaîne exacte" auto ". Encore une fois, pour que cette comparaison fonctionne, une chaîne doit exister dans le champ de description pour que l'
-ne
opérateur puisse la comparer à" auto ". Valeurs NULL sont supprimés de cette comparaison car il ne peut pas comparer un NULL à une valeur de chaîne.
Dans votre exemple, supposons à nouveau que vous avez 1 utilisateur AD dont la description est égale à "auto", quelques centaines avec autre chose que "auto" et quelques centaines avec des descriptions NULL. En parcourant la logique de commande, il fera:
- Donnez-moi tous les utilisateurs AD dont la description n'est pas égale à "auto" - résulte en quelques centaines d'utilisateurs avec quelque chose d'autre que "auto" dans leur description. Il ne tire pas les utilisateurs avec des descriptions NULL car il ne peut pas comparer un NULL à une chaîne de texte.
Quoi qu'il en soit, toute la différence entre les deux commandes n'est certainement pas intuitive.
En utilisant cette commande, vous devriez également pouvoir attraper les NULLs avec un "-and" comme ceci:
{description -ne "auto" -and description -ne $NULL}
Je ne suis pas à 100% sur la syntaxe car je ne peux pas le tester pour le moment, et il y a probablement une meilleure façon de le faire que cela aussi. Quand tout est en panne, c'est assez anti-climatique et il a fallu beaucoup de frappe pour l'expliquer, mais j'ai rencontré des trucs bizarres comme celui-ci avant d'utiliser les différents opérateurs et beaucoup d'essais et d'erreurs car je ne me souviens jamais de toutes les mises en garde qui vont de pair avec l'utilisation de chacun.
Référence: http://technet.microsoft.com/en-us/library/hh847732.aspx :
Opérateurs de comparaison
Utilisez les opérateurs de comparaison (-eq, -ne, -gt, -lt, -le, -ge) pour comparer les valeurs et les conditions de test. Par exemple, vous pouvez comparer deux valeurs de chaîne pour déterminer si elles sont égales.
Les opérateurs de comparaison incluent les opérateurs de correspondance (-match, -notmatch), qui trouvent des modèles à l'aide d'expressions régulières; l'opérateur replace (-replace), qui utilise des expressions régulières pour modifier les valeurs d'entrée; les opérateurs similaires (-like, -notlike), qui trouvent des modèles à l'aide de caractères génériques (*); et les opérateurs de confinement (in, -notin, -contains, -notcontains), qui déterminent si une valeur de test apparaît dans un ensemble de référence.
Ils incluent également les opérateurs au niveau du bit (-bAND, -bOR, -bXOR, -bNOT) pour manipuler les modèles de bits dans les valeurs.
Pour plus d'informations, consultez about_Comparison_Operators
Opérateurs logiques
Utilisez des opérateurs logiques (-and, -or, -xor, -not,!) Pour connecter des instructions conditionnelles en une conditionnelle complexe unique . Par exemple, vous pouvez utiliser un opérateur logique et pour créer un filtre d'objet avec deux conditions différentes.
Pour plus d'informations, consultez about_Logical_Operators.