从 csv 创建 PowerShell 批量联系人

PowerShell bulk contact creation from csv

如何批量创建广告联系人?我尝试这样的事情。我的 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:无法验证参数 'Name' 的参数。参数为 null 或空。提供一个不为 null 或空的参数,然后重试该命令。 在 line:3 char:64

这是我的 CSV

感谢您向我们展示您正在使用的 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
这将帮助您保持代码的可读性和可维护性,而不必使用长..LONG 代码行。

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 项允许您使用哈希表设置比 Get-ADObject cmdlet 通过其正常参数提供的更多 AD 属性。
在这里要格外小心,使用正确的 LDAP 属性名称
可以找到 LDAP 属性名称,例如 here