La differenza chiave tra i due è che il primo comando non comporta un confronto diretto dei valori per ottenere tutti i risultati, e il secondo comando lo fa. Il primo comando include i risultati NULL e il secondo no (come MDMarra ha già scoperto). Entrambi i comandi iniziano con questo cmdlet:
get-aduser
Quando si analizza il seguito, tenere presente che i risultati di questo cmdlet includono tutti gli utenti AD indipendentemente da qualsiasi altra cosa nel -filter
parametro successivo.
Ora suddividiamo le due parti che sono diverse. Il primo:
{-not (description -eq "auto")}
...si intende
- "capire dove l'attributo description è uguale alla stringa di testo" auto ". Per far funzionare questo confronto, nel campo della descrizione deve esistere una stringa affinché l'
-eq
operatore sia in grado di confrontarlo con" auto ". I valori NULL vengono eliminati da questo confronto poiché non può confrontare un valore NULL con un valore stringa.
- indipendentemente dal
-eq
Il parametro filter mi dà TUTTO ciò che NON è il risultato di (description -eq "auto")
, che includerà NULL, perché il cmdlet originale get-aduser
, include tutti gli utenti AD. Non è stato necessario confrontare nulla con qualcos'altro con l' -not
operatore. Ti ha dato tutto tranne i risultati del (description -eq "auto")
filtro.
Nel tuo esempio supponi di avere 1 utente AD con una descrizione uguale a "auto", alcune centinaia con qualcosa di diverso da "auto" e alcune centinaia con descrizioni NULL. Passando attraverso la logica di comando farà:
- Dammi tutti gli utenti AD (get-aduser) in cui la descrizione equivale a "auto" - risulta in 1 utente
- Dammi tutti gli utenti AD che NON sono quello che mi hai appena dato - il risultato sono le poche centinaia con qualcos'altro E le poche centinaia che hanno NULL.
Poiché non è stato necessario confrontare nulla con qualsiasi altra cosa utilizzando l' -not
operatore, il risultato includeva gli utenti con descrizione NULL acquisiti nel get-aduser
cmdlet originale .
Il secondo comando:
{description -ne "auto"}
...si intende
- "capire dove l'attributo description non equivale alla stringa esatta" auto ". Anche in questo caso, affinché questo confronto funzioni, nel campo della descrizione deve esistere una stringa affinché l'
-ne
operatore possa confrontarla con" auto ". Valori NULL vengono eliminati da questo confronto poiché non può confrontare un valore NULL con un valore di stringa.
Nel tuo esempio supponiamo di avere 1 utente AD con una descrizione uguale a "auto", alcune centinaia con qualcosa di diverso da "auto" e alcune centinaia con descrizioni NULL. Passando attraverso la logica di comando farà:
- Dammi tutti gli utenti AD in cui la descrizione non è uguale a "auto" - risulta nelle poche centinaia di utenti con qualcosa di diverso da "auto" nella loro descrizione. Non attira gli utenti con le descrizioni NULL perché non può confrontare un NULL con una stringa di testo.
In ogni caso, l'intera differenza tra i due comandi è decisamente non intuitiva.
Usando questo comando dovresti essere in grado di catturare i NULL con un "-e" dentro così:
{description -ne "auto" -and description -ne $NULL}
Non sono al 100% sulla sintassi poiché non riesco a provarla in questo momento, e probabilmente c'è un modo migliore per farlo anche di questo. Quando è tutto analizzato, è abbastanza anti-climatico e ci sono voluti un sacco di battute per spiegare, ma ho incontrato cose strane come questa prima di usare i vari operatori e molte prove ed errori dato che non ricordo mai tutte le avvertenze che vanno di pari passo con l'uso di ognuno.
Riferimento: http://technet.microsoft.com/en-us/library/hh847732.aspx :
Operatori di confronto
Utilizzare gli operatori di confronto (-eq, -ne, -gt, -lt, -le, -ge) per confrontare i valori e le condizioni di prova. Ad esempio, è possibile confrontare due valori di stringa per determinare se sono uguali.
Gli operatori di confronto includono gli operatori di corrispondenza (-match, -notmatch), che trovano schemi usando espressioni regolari; l'operatore di sostituzione (-replace), che utilizza espressioni regolari per modificare i valori di input; gli operatori simili (-like, -notlike), che trovano schemi usando caratteri jolly (*); e gli operatori di contenimento (in, -notin, -contains, -notcontains), che determinano se un valore di test appare in un set di riferimento.
Includono anche gli operatori bit a bit (-bAND, -bOR, -bXOR, -bNOT) per manipolare i pattern di bit nei valori.
Per ulteriori informazioni, vedere about_Comparison_Operators
Operatori logici
Utilizzare operatori logici (-and, -or, -xor, -not,!) Per collegare le istruzioni condizionali in un singolo condizionale complesso . Ad esempio, è possibile utilizzare un operatore logico e per creare un filtro oggetti con due diverse condizioni.
Per ulteriori informazioni, consultare about_Logical_Operators.