【问题标题】:Set-ADUser based on Email in CSV FileSet-ADUser 基于 CSV 文件中的电子邮件
【发布时间】:2015-03-23 00:32:57
【问题描述】:

如果在 csv 文件中找到电子邮件地址,我正在尝试从 csv 文件中读取信息,并使用它将电话号码添加到我们的活动目录中。 (我知道 EmailAddress 属性是不可靠的,但我必须根据数据的导出位置来处理它)。我有一个 powershell 脚本:

Import-Module ActiveDirectory
$csv = Import-Csv c:\users\user1\Desktop\userphones2.csv
foreach ($line in $csv) {
    Get-ADUser -Filter {EmailAddress -eq $line.email} | 
    Set-ADUser -OfficePhone $line.phone
}

当我运行它时,对于数据文件中的每条记录,我都会收到一个错误

Get-ADUser:在类型对象中找不到属性“电子邮件”:“System.Management.Automation.PSCustomObject”

CSV 文件的结构如下:

#TYPE System.Data.DataRow
"email","phone"
"user@example.com","8885555555"
"user2@example.com","8885555552"

如果我在 foreach 循环中执行写入输出而不是尝试获取数据,则此方法有效。我发现许多不同的语法描述了如何为这些过滤器将变量放在这样的行中,但没有任何效果。如何让这个过滤器工作?

【问题讨论】:

  • CSV 似乎没有字段 email。请提供示例输入数据。
  • 确实如此。写输出使用相同的变量。我已经包含了前几行。

标签: powershell csv active-directory


【解决方案1】:

您在 AD 中为电子邮件属性使用了错误的名称。这是mail 不是EmailAddress。我在 PowerShell 中对此进行了测试,它对我有用。

您也不能在过滤器中使用$line.email PowerShell 不知道如何处理它。我不知道这样做的技术原因,但我从来没有让它以这种方式工作,所以我总是把它放在一个变量中。试试这个:

Import-Module ActiveDirectory
$csv = Import-Csv c:\users\user\Desktop\userphones2.csv
foreach ($line in $csv) {
    $email = $line.email
    Get-ADUser -Filter {mail -eq $email} | 
        Set-ADUser -OfficePhone $line.phone
}

【讨论】:

  • EmailAddress 比较可以正常工作。出现问题是因为无法在过滤器脚本块中访问该属性。
  • 所以我必须在脚本块中使用 mail 属性而不是 EmailAddress 吗?这似乎奏效了。谢谢大家。
  • 正如 Ansgar 所说,它应该可以工作。问题是您无法在过滤器中引用 csv 值,因此您必须先将其放入变量中,然后才能在过滤器中检查它。这解决了你的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 2021-05-03
  • 1970-01-01
  • 2011-07-15
相关资源
最近更新 更多