2017-02-16 108 views
2

我對PowerShell的自學經驗有限,所以這可能是一些基本的問題,但我似乎無法做到。Powershell:針對屬性過濾屬性

我在Active Directory中,我需要提取電子郵件地址不以SamAccountName開頭的用戶列表。 (所以如果你的登錄是jdoe,但你的電子郵件是[email protected],那麼你的個人資料將被退回)

我已經得到了我所需要的大部分...但我無法弄清楚如何比較這兩個屬性反對海誓山盟。

現在我已經

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

我已經嘗試了一些不同的東西來過濾我需要什麼,下面的命令顯示了我想要的東西(當然這句法不工作)

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

謝謝!

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

你甚至可以與第一過濾器結合起來,使用-and操作:

回答

3

在你的第二個管道元件使用腳本塊爲Where-Object過濾器一樣

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

最後,指定只需要您需要的屬性-Properties *(無需等待域控制器返回您不需要的數據):

$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

您只需指定不屬於默認屬性集的屬性。由於默認情況下它拉取'Name'和'samAccountName',所以只需指定'EmailAddress'和'PasswordNeverExpires'。除了缺省值之外,它會將這些屬性粘貼到檢索到的東西列表中。 – TheMadTechnician

+1

@TheMadTechnician正確,但我很懶,並且通過將它們包含在'$ Properties'列表中,我可以通過'Select-Object'重用該變量;-) –

+0

哦,是的--Properties *只是一個神器在我完成它並進行更改之前,我會進行調整。謝謝! :) – Steve