【问题标题】:Why can't i extract the actual given name properties in powershell?为什么我不能在 powershell 中提取实际的给定名称属性?
【发布时间】:2017-05-26 15:25:07
【问题描述】:
$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 列包括:

第一个最后一个电子邮件

韦斯特利 XXX email@email.gov

戴夫 XXX email@email.gov

加雷斯 XXX email@email.gov

保罗 XXX email@email.gov

我想要它做的是通过 CSV 运行并从 PowerShell 中提取活动帐户信息,但是我不认为它这样做,因为我的名字应该打印出其他东西

它应该打印出 DavidJ 作为测试,因为我已经编辑了我的帐户,而是打印出 Dave 作为我的名字,它在电子表格 (CSV) 中的样子。

get-aduser : 无法识别搜索过滤器 在行:2 字符:18 + $UserProps = get-aduser -Filter "GivenName -eq '$($user.GivenName)' -and Sur ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Get-ADUser], ADException + FullyQualifiedErrorId : ActiveDirectoryServer:8254,Microsoft.ActiveDirectory.Management.Commands.GetADUser

预期输出:

电子邮件地址名字部门姓氏

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

westley@email.gov westley mydepartment hislastnamefromAD

david@email.gov davidj(来自 AD)mydepartment mylastnamefromAD

gareth@gmail.gov gareth mydepartment hislastnamefromAD

paul@gmail.com paul mydepartment hislastnamefromAD

【问题讨论】:

    标签: powershell


    【解决方案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 文件中提供的内容。您需要将为您的自定义对象提供的值更改为使用来自 Active Directory 的 $UserProps 形式的返回值。

    FirstName = $UserProps.GivenName
    

    【讨论】:

    • 好点,虽然还有 2 个额外的问题:$Users 只有 .First.Last.Email 属性,所以过滤器不会按预期工作,其余的也不会从$User复制的输出属性。
    • 感谢您的帮助,但现在我得到一个完全不同的错误方法调用失败,因为 [System.Management.Automation.PSObject] 不包含名为“op_Addition”的方法。在 line:4 char:5 + $Results += New-Object PSObject -Property @{ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (op_Addition:String) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound
    • @davidjbeiler:该错误表明您最初忘记运行$Results = @()
    【解决方案2】:

    您导入的对象有.First。和.Last 属性,但您尝试在Get-ADUser -Filter 参数中使用名为.GivenName.SurName 的属性。

    此外,作为Jason's answer points out,您正在尝试从imported-from-CSV $User 变量而不是从queryed-from-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
    

    【讨论】:

    • @davidjbeiler:我认为您的过滤器在语法上没有任何问题,因此建议尝试使用 literal 值来缩小问题范围。如果它适用于文字值,例如-Filter "GivenName -eq 'David' -and Surname -eq 'Doe'",那么您知道问题出在 CSV 中的值。
    • 我尝试了你的建议,但它什么也没返回,但也没有错误。我从 csv 文件中确定了它的确切内容...
    • 这意味着两个不相关的问题:(a) CSV 文件中的 $_.First$_.Last 值破坏了过滤器,并且 (b) 您尝试的硬编码过滤器值与任何不匹配AD 中的用户。 Jason 的回答不起作用,因为它在过滤器中使用了$user.GivenName$user.Surname,而$user 上不存在此类属性(仅存在Import-Csv -Header 参数中指定的属性:.First.Last , .Email)。
    • P.S.:我希望你没有真正尝试我的建议 as-is,姓 placeholder Doe.
    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 2021-04-10
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 2012-04-02
    • 2013-09-09
    • 1970-01-01
    相关资源
    最近更新 更多