为什么可以';提取powershell中的实际给定名称属性吗?

为什么可以';提取powershell中的实际给定名称属性吗?,powershell,Powershell,这是test1.CSV 3栏包括: 最后一封邮件 韦斯特利XXX酒店email@email.gov 戴夫XXXemail@email.gov 加雷思XXXemail@email.gov 保罗XXXemail@email.gov 我想要它做的是通过CSV运行并从PowerShell中提取活动帐户信息,但是我认为它不会这样做,因为我的名字应该打印出其他内容 它应该打印出DavidJ作为测试,因为我已经编辑了我的帐户,但是它将Dave作为我的名字打印出来,它是如何在电子表格(CSV)中显示的 get

这是test1.CSV 3栏包括:

最后一封邮件

韦斯特利XXX酒店email@email.gov

戴夫XXXemail@email.gov

加雷思XXXemail@email.gov

保罗XXXemail@email.gov

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

它应该打印出DavidJ作为测试,因为我已经编辑了我的帐户,但是它将Dave作为我的名字打印出来,它是如何在电子表格(CSV)中显示的

get aduser:无法识别搜索筛选器 第2行字符:18 +$UserProps=get aduser-Filter“GivenName-eq'$($user.GivenName)”-和Sur。。。 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:NotSpecified:(:)[Get ADUser],异常 +FullyQualifiedErrorId:ActiveDirectoryServer:8254,Microsoft.ActiveDirectory.Management.Commands.GetADUser

预期产出:

EmailAddress FirstName部门LastName

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

westley@email.govwestley mydepartment他姓Fromad

david@email.gov大卫(来自广告)我的部门我的姓氏来自广告

gareth@gmail.govgareth我的部门他姓Fromad


paul@gmail.compaul mydepartment他的LastName fromAD

您导入的对象具有
.First
.Last
属性,但您试图在
获取ADUser
-Filterargu中使用名为
.GivenName
的属性是的

此外,正如所述,您试图从导入自CSV的
$User
变量而不是从查询自AD的
$UserProps
变量填充结果对象

这些问题已在代码的这个更简单、更惯用的格式中得到解决:

$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 
在您的示例中:

$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
您正在使用$User.GivenName而不是$UserProps。$User变量仅使用csv文件中提供的内容。您需要将为自定义对象提供的值更改为使用从Active Directory返回的$UserProps格式

$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 

很好,虽然还有两个问题:
$Users
只有
.First
.Last
.Email
属性,所以过滤器无法正常工作,从
$User
复制的其余输出属性也无法正常工作。谢谢您的帮助,但现在我收到了一个完全不同的错误消息od调用失败,因为[System.Management.Automation.PSObject]不包含名为“op_Addition”的方法。在第4行中,char:5+$Results+=新对象PSObject-Property@{+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:无效操作:(op_Addition:String)[],RuntimeException+FullyQualifiedErrorId:MethodNotFound@davidjbeiler:该错误表明您忘记运行
$Results=@()
一开始。@DavidBeiler:我看你的过滤器没有语法上的错误,因此建议尝试使用文字值来缩小问题的范围。如果它与文字值一起工作,例如,
-filter“GivenName-eq'David'”和姓氏-eq'Doe'“
,那么您就知道问题出在CSV的值上了。我尝试了您的建议,但没有返回任何结果,但没有出现错误。我确定了CSV文件中的内容……这意味着两个不相关的问题:(a)CSV文件中的
$。第一个
$。最后一个
值打破了过滤器;(b)您尝试的硬编码筛选器值与AD中的任何用户都不匹配。Jason的答案无法工作,因为它在筛选器中使用了
$user.GivenName
$user.namite
,而
$user
上不存在此类属性(只有在
导入Csv-标题
参数中指定的才存在:
.First
.Last
。Email
).P.S.:我真希望你没有实际尝试我的建议,使用姓氏占位符
Doe
FirstName = $UserProps.GivenName