2016-09-28 50 views
1

我試圖從活動目錄中獲取用戶,他們擁有特定的電子郵件地址。通過電子郵件查找廣告用戶

我有一個CSV文件,其中包含電子郵件。

$data = import-csv -path .\are.csv -delimiter + 
foreach($i in $data) 
{ 
    get-aduser -filter {UserPrincipalName -like '$i.email'} 
} 

我的問題是,我沒有得到任何輸出。沒有錯誤,沒有數據。當我用其中一個電子郵件地址替換$i.email時,我得到了一個用戶的正確用戶信息。所以硬編碼的作品。

當我這樣做:

foreach($i in $data) 
{ 
    $i.email 
} 

我收到的所有電子郵件的列表。

代碼有什麼問題?

回答

1

您的變量在單引號因此沒有得到填充。你必須三個選項來修復:

使用有子表達式雙引號$()

UserPrincipalName -like "$($i.email)" 

只是省略引號:

UserPrincipalName -like $i.email 

最後,你可以使用一個格式字符串(即使帶有單引號):

UserPrincipalName -like ('{0}' -f $i.email) 

下面是一個例子來演示使用Write-Host cmdlet的什麼實際價值就會被傳遞:

$data = 
@' 
email, id 
[email protected], 1 
'@ | convertfrom-csv 

foreach($i in $data) 
{ 
    Write-Host '$i.email' # This is your current approach 
    Write-Host "$($i.email)" 
    Write-Host $i.email 
    Write-Host ('{0}' -f $i.email) 
} 

輸出:

$i.email # This is the output of your current approach 
[email protected] 
[email protected] 
[email protected] 
+0

當我把它們放在雙引號 - 什麼變化。仍然沒有輸出。當我省略它們時,我收到一條錯誤消息:在「System.Management.Automation.PSCustomObject」類型的對象中未找到「Property」email「 – redleo85

+0

您是否也將它放入子表達式中?所有三個提供的示例 –

+0

子表達式是什麼意思?我只是用給定的例子代替了-filter參數。 – redleo85