2017-05-26 74 views
1
$Results = @() 
$Users = Import-CSV C:\Filter\test1.CSV -Header First,Last,Email 
Foreach($User in $Users){ 
    $UserProps = get-aduser -Filter "GivenName -eq '$($user.GivenName)' -and Surname -eq '$($user.Surname)'" -Properties GivenName,Surname,EmailAddress,Department 
    $Results += New-Object PSObject -Property @{ 
     FirstName = $User.GivenName 
     LastName = $User.Surname 
     EmailAddress = $User.EmailAddress 
     Department = $UserProps.Department} 
} 
$Results 

這是test1.CSV 3列包括:爲什麼我不能在PowerShell中提取實際給定的名稱屬性?

名姓電子郵件

韋斯特利XXX [email protected]

戴夫XXX [email protected]

加雷斯XXX [email protected]

保羅XXX [email protected]

我想什麼它做的是通過CSV運行,並從PowerShell的拉活躍賬戶信息,但我不認爲它這樣做,因爲我的名字應該是打印出別的東西

應打印出DavidJ作爲因爲我已經編輯了我的帳戶,但是它的打印方式是將Dave打印爲電子表格(CSV)中的名字。

得到-ADUser便有:搜索過濾器無法識別 在行:2字符:18 + $ UserProps = GET-ADUser便有-Filter「給定名稱-eq '$($ user.GivenName)' -and蘇爾.. 。 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) [獲取-ADUser便有],ADException + FullyQualifiedErrorId:ActiveDirectoryServer:8254,Microsoft.ActiveDirectory.Management.Commands.GetADUser

預期輸出:

EmailAddress的名字系姓氏

------------ --------- ---------- --------

westley @ email.gov韋斯特利mydepartment hislastnamefromAD

[email protected] davidj(來自AD)mydepartment mylastnamefromAD

[email protected]加雷mydepartment hislastnamefromAD

[email protected]保羅mydepartment hislastnamefromAD

回答

0

您導入的對象有.First。和.Last屬性,但你想在你的Get-ADUser-Filter參數使用命名.GivenName.SurName性能。

此外,由於Jason's answer points out,您試圖從導入的CSV $User變量中填充結果對象,而不是從查詢的AD $UserProps變量中填充結果對象。

這些問題已被固定在你的代碼的這個更簡單,更地道再形成

$Results = Import-CSV C:\Filter\test1.CSV -Header First,Last,Email | 
    Get-ADUser -Filter "GivenName -eq '$($_.First)' -and Surname -eq '$($_.Last)'" -Properties GivenName,Surname,EmailAddress,Department | 
    Select-Object @{ l = 'FirstName'; e = 'GivenName' }, 
        @{ l = 'LastName'; e = 'Surname' }, 
        EmailAddress, 
        Department 

# Output results. 
$Results 
+0

@davidjbeiler:我沒有在您的過濾器中看到任何語法錯誤,因此建議嘗試使用_literal_值來縮小問題範圍。如果它適用於字面值,例如'-Filter「GivenName -eq'David'和Surname -eq'Doe'」',那麼你知道它是來自CSV的值是問題。 – mklement0

+0

我試過你的建議,但它沒有返回,但沒有錯誤。我確信它完全來自csv文件... – davidjbeiler

+0

這意味着兩個不相關的問題:(a)來自CSV文件的'$ _。First'和'$ _。Last'值會破壞過濾器,並且(b )您嘗試的硬編碼過濾器值與AD中的任何用戶都不匹配。 Jason的答案無法工作,因爲它在過濾器中使用'$ user.GivenName'和'$ user.Surname',而這些屬性不存在於'$ user'上(只有'Import-Csv -Header '參數存在:'.First','。Last','.Email')。 – mklement0

1

在您的例子:

$Results = @() 
$Users = Import-CSV C:\Filter\test1.CSV -Header First,Last,Email 
Foreach($User in $Users){ 
    $UserProps = get-aduser -Filter "GivenName -eq '$($user.GivenName)' -and Surname -eq '$($user.Surname)'" -Properties GivenName,Surname,EmailAddress,Department 
    $Results += New-Object PSObject -Property @{ 
     FirstName = $User.GivenName 
     LastName = $User.Surname 
     EmailAddress = $User.EmailAddress 
     Department = $UserProps.Department} 
} 
$Results 

您正在使用$ User.GivenName而不是$ UserProps。 $ User變量僅使用csv文件中提供的內容。您需要將爲自定義對象提供的值更改爲使用$ UserProps形式的Active Directory中的返回值。

FirstName = $UserProps.GivenName 
+2

好點,雖然還有兩個額外的問題:'$ Users'只有'.First','.Last'和'.Email'屬性,所以過濾器不能按預期工作,其餘輸出屬性也不會複製從'$用戶'。 – mklement0

+0

感謝您的幫助,但現在我得到一個完全不同的錯誤方法調用失敗,因爲[System.Management.Automation.PSObject]不包含名爲'op_Addition'的方法。 在線:4 char:5 + $結果+ =新對象PSObject -Property @ { + ~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~操作:(op_Addition:字符串)[],RuntimeException + FullyQualifiedErrorId:MethodNotFound – davidjbeiler

+1

@davidjbeiler:該錯誤表明你忘了運行最初''結果= @()'。 – mklement0

相關問題