2017-02-16 4 views
2

Ich habe begrenzte, Autodidakt Erfahrung mit PowerShell, so ist dies wahrscheinlich etwas Grundlegendes, aber ich kann nicht scheinen, es richtig zu machen.Powershell: Filtern Eigenschaften Gegen Eigenschaften

Ich bin in Active Directory und ich muss eine Liste der Benutzer ziehen, deren E-Mail-Adresse nicht mit ihrem SamAccountName beginnt. (Also, wenn Ihr Login jdoe ist, aber Ihre Email ist [email protected] dann würde Ihr Profil zurückgegeben)

Ich habe das meiste von dem, was ich brauche ... aber ich kann nicht herausfinden, wie man vergleicht die beiden Eigenschaften gegeneinander.

Gerade jetzt habe ich

Get-ADUser -Filter 'enabled -eq $true' -Properties *| 
Where {$_.PasswordNeverExpires -eq $false} | 
Select Name, SamAccountName, EmailAddress, PasswordNeverExpires 

ich ein paar verschiedene Dinge versucht haben zu filtern, was ich brauche, der folgende Befehl zeigt genau das, was ich will (aber natürlich diese Syntax nicht funktioniert)

Get-ADUser -Filter 'enabled -eq $true' -Properties *| 
Where {$_.PasswordNeverExpires -eq $false} | 
Where-Object EmailAddress -Contains SamAccountName | 
Select Name, SamAccountName, EmailAddress, PasswordNeverExpires 

Danke!

Antwort

3

eine Skript für die Where-Object Filter verwenden wie in der zweiten Pipeline-Elemente:

Where-Object { $_.EmailAddress -notlike "$($_.SamAccountName)*" } 

Sie können es sogar mit dem ersten Filter kombinieren, den -and Operator:

Where-Object { $_.PasswordNeverExpires -eq $false -and $_.EmailAddress -notlike "$($_.SamAccountName)*" } 

Schließlich angeben nur die Eigenschaften, die Sie benötigen, dass -Properties * (Sie müssen nicht warten, bis der Domänencontroller Daten zurückgibt, die Sie nicht benötigen):

$Properties = 'Name','SamAccountName','EmailAddress','PasswordNeverExpires' 
Get-ADUser -Filter 'enabled -eq $true' -Properties $Properties |Where-Object { 
    $_.PasswordNeverExpires -eq $false -and 
    $_.EmailAddress -notlike "$($_.SamAccountName)*" 
} |Select-Object $Properties 
+1

Sie müssen nur Eigenschaften angeben, die nicht im Standardeigenschaftensatz enthalten sind. Da standardmäßig "Name" und "samAccountName" abgerufen werden, müssen Sie nur "EmailAddress" und "PasswordNeverExpires" angeben. Es wird diese Eigenschaften auf die Liste der Dinge, die es zusätzlich zu den Standard-Eigenschaften abruft. – TheMadTechnician

+1

@TheMadTechnician Korrekt, aber ich bin faul, und indem ich sie in die '$ Properties'-Liste einbeziehe, kann ich die Variable mit' Select-Object' wiederverwenden ;-) –

+0

Oh ja, die -Eigenschaften * sind nur ein Artefakt Ich werde mich anpassen, bevor ich es fertigstelle und die Änderungen vornehme. Vielen Dank! :) – Steve

Verwandte Themen