从 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
如何批量创建广告联系人?我尝试这样的事情。我的 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