从邮件地址的PowerShell CSV导入AD查询用户名

我有一个包含邮件地址和其他各种内容的CSV文件,我尝试从中获取广告帐户。

CSV看起来像这样:

TestUserMail;accountNumber;TestDisplayName
user.surname@domain.com;1;
user.surname@domain.com;2;
user.surname@domain.com;3;

代码如下:

Import-Csv -Path 'C:\temp\test.csv' -delimiter ";" | ForEach-Object {
    $_.TestDisplayName = Get-ADUser -Filter {mail -eq '$_.Testusername'} |
                         Select-Object -ExpandProperty Name
    $_
} | Format-Table

问题在于,似乎无法使用$_.Testusername变量来进行广告查询。结果始终是空的。如果我将mailadress直接放入脚本中,就可以正常工作。

有人知道这个怎么回事吗?

qq9931 回答:从邮件地址的PowerShell CSV导入AD查询用户名

您使用$_自动变量错误。在循环内部,$_是从CSV文件中获取的一个对象,其属性为'TestUserMail'

类似的事情应该起作用

Import-Csv -Path 'C:\temp\test.csv' -Delimiter ";" | ForEach-Object {
    $user = Get-ADUser -Filter "mail -eq '$_.TestUserMail'" -Properties mail,Name -ErrorAction SilentlyContinue
    # if we found a user with that email address,output the users Name as object
    # so Format-Table will provide a header.
    if ($user) { $user | Select-Object Name }
}
,

问题出在您的变量扩展中。

mail -eq '$_.TestUserName'

有3个问题:

  • 您使用单引号引起来,因此根本没有完成 变量扩展
  • $ _被展开,而不是$ _。TestUserName。您需要将它们包含在$()
  • 列名称为TestUserMail

正确的语法为:

mail -eq "$($_.TestUserMail)"
,

首先,您在过滤器中犯了一个错误。应该有一个$ _。TestUserMail而不是TestUserName。 其次,您的单引号中的表达式不会扩展。 这行得通。

 Import-Csv -Path 'C:\tmp\test.csv' -delimiter ";" | ForEach-Object {
    $_.TestDisplayName = get-aduser -filter "mail -eq '$($_.TestUserMail)'" | Select-Object -ExpandProperty Name
 $_ } | Format-Table

看看https://docs.microsoft.com/en-us/powershell/module/addsadministration/get-aduser?view=win10-ps

本文链接:https://www.f2er.com/3160409.html

大家都在问