【问题标题】:PowerShell bulk contact creation from csv从 csv 创建 PowerShell 批量联系人
【发布时间】:2020-11-20 18:02:06
【问题描述】:

如何批量创建 AD 联系人?我尝试这样的事情。我的 CSV 文件中只有名字和姓氏。

$CSVPath = "C:\mycontacts.csv"

Import-Csv $CSVPath | foreach{New-ADObject -Type Contact -Name $_.FirstName - OtherAttributes @{'FirstName'=$_.FirstName;'LastName'=$_.LastName} - Path "OU=Contacts,OU=Lab,DC=MYDC,DC=com"}

这是我的错误信息: New-ADObject:无法验证参数“名称”上的参数。参数为 null 或空。提供一个不为 null 或空的参数,然后重试该命令。 在 line:3 char:64

这是我的 CSV

【问题讨论】:

  • 向我们展示 CSV 的前 3 或 4 行(已清理)。它有标题吗?,使用的分隔符是什么(Import-Csv 默认为逗号),是否存在 FirstName 留空的条目?

标签: powershell active-directory


【解决方案1】:

感谢您向我们展示您正在使用的 csv 文件。

我们现在可以看到使用的分隔符是分号。

通过添加 -Delimiter 参数让 Import-Csv 知道它不应使用默认逗号来修复代码:

Import-Csv $CSVPath -Delimiter ';' | ForEach-Object {
    New-ADObject -Type Contact -Name $_.FirstName -DisplayName ('{0} {1}' -f $_.FirstName, $_.LastName) -Path "OU=Contacts,OU=Lab,DC=MYDC,DC=com"
}

此外,您在破折号和参数名称之间添加了空格 - OtherAttributes 和这里 - Path 不应该在那里。

也许我也有兴趣让您开始在可以采用许多参数的 cmdlet 上使用 Splatting
这将帮助您保持代码的可读性和可维护性,而不必使用长..长的代码行。

Import-Csv $CSVPath -Delimiter ';' | ForEach-Object {
    $splat = @{
        Type        = 'Contact'
        Name        = $_.FirstName
        Path        = "OU=Contacts,OU=Lab,DC=MYDC,DC=com"
        DisplayName = '{0} {1}' -f $_.FirstName, $_.LastName
        # more parameters can be set here, mostly using 'OtherAttributes'
        # make sure you use the LDAP attribute names with correct casing
        OtherAttributes = @{'givenName'      = $_.FirstName
                            'sn'             = $_.LastName
                            'mail'           = $_.EmailAddress
                            'proxyAddresses' = $_.EmailAddress
                           }        }
    New-ADObject @splat
}

注意:OtherAttributes 项允许您使用 Hashtable 设置比 Get-ADObject cmdlet 通过其正常参数提供的更多的 AD 属性。
请特别注意在正确的大小写中使用 LDAP 属性名称
可以找到 LDAP 属性名,例如 here

【讨论】:

  • 非常感谢您的帮助。但我仍然有问题。现在我得到:“New-ADObject:指定的目录服务属性或值不存在参数名称:FirstName”我尝试您提供的第一个和第二个解决方案
  • @IvanRadunković 啊,没有先检查.. New-ADObject 没有参数FirstNameLastName。只有NameDisplayName。我已经更新了我的答案
  • 哇。你救了我。非常感谢您的帮助。现在它工作正常。再次感谢好心的先生
  • @IvanRadunković 我已经编辑了我的答案(仅在我使用 splatting 的第二部分)来展示如何添加更多属性,例如mail。另请参阅最后的注释。代码当然假设您在 CSV 文件中有一个列 EmailAddress..
  • 再次非常感谢。我在 CSV 中有电子邮件地址。现在好了:)
猜你喜欢
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多