Powershell 批量创建新联系人并添加到发行版

Powershell 批量创建新联系人并添加到发行版,powershell,csv,active-directory,Powershell,Csv,Active Directory,我有一个使用PS和CSV创建批量外部联系人的脚本。我想调整它,不仅创建联系人,而且还将联系人添加到任何指定的发行版 foreach($contact in (import-csv c:\users\ME\desktop\contactstest.csv)){ $properties = @{ type = 'Contact' name = $contact.firstname + ", " + $contact.la

我有一个使用PS和CSV创建批量外部联系人的脚本。我想调整它,不仅创建联系人,而且还将联系人添加到任何指定的发行版

foreach($contact in (import-csv c:\users\ME\desktop\contactstest.csv)){
$properties = @{
    type            = 'Contact'
    name            = $contact.firstname + ", " + $contact.lastname
    OtherAttributes = @{'mail' = "$($contact.email)"}
    Path            = "OU=External Contacts,DC=Company,DC=org"
}

New-ADObject @properties

}
如果我有以下列的CSV。这可以吗

Firstname/lastname/email/Group

CSV位于DC的桌面上


CSV示例

第一,最后,电子邮件,小组


比利,鲍勃,bb@aol.com,emailist1

我现在知道第一次出了什么问题。
我的意思是让你用我的代码块替换新的ADObject@properties行。由于您也将其保留在中,因此代码尝试创建联系人两次,导致出现错误消息并跳过将联系人添加到组中的部分

如果您的CSV如下所示:

first,last,email,group
billy,bob,bb@aol.com,emailist1
jane,doe,jd@somewhereintheworld.com,emaillist1;emaillist5
注:第二个触点添加到两个组中,用分号分隔

以下是完整的代码:

foreach ($contact in (import-csv c:\users\ME\desktop\contactstest.csv)) {
    # create a hash table for splatting the parameters to New-ADObject
    $properties = @{
        type            = 'Contact'
        name            = $contact.firstname + ", " + $contact.lastname
        OtherAttributes = @{'mail' = "$($contact.email)"}
        Path            = "OU=External Contacts,DC=Company,DC=org"
    }
    # create the contact and capture the resulting object
    $newContact = New-ADObject @properties -PassThru -ErrorAction SilentlyContinue
    if ($newContact) {
        # if success, add this contact to the group(s)
        $contact.Group -split ';' | ForEach-Object {
            Add-ADGroupMember -Identity $_ -Members $newContact
        }    
    }
    else {
        Write-Warning "Could not create contact $($contact.lastname)"
    }
}
另外,您还可以将PassThru和ErrorAction参数包括到splatting散列中:

$properties = @{
    type            = 'Contact'
    name            = $contact.firstname + ", " + $contact.lastname
    OtherAttributes = @{'mail' = "$($contact.email)"}
    Path            = "OU=External Contacts,DC=Company,DC=org"
    PassThru        = $true
    ErrorAction     = 'SilentlyContinue'
}

-PassThru
添加到新的ADObject cmdlet并捕获新创建的联系人。然后在执行这些批量添加时,在的
-Members
参数中使用该对象。某些联系人将添加到多个组/并非所有联系人都添加到同一组。如果您的联系人需要加入多个组,请将其添加到csv的
列中,并用类似
的字符分隔。然后在该字符的代码拆分中,对每个对象执行一个
ForEach Object
循环,将
addgroupmember
行作为标识参数。请查看我的编辑,我已将其添加到我的答案中。我刚刚得到一个错误,该对象已经创建(即使我清除CSV并添加一个新联系人,但该联系人在AD中不存在)这会创建新联系人,但不会添加到组中(尽管消息表明它无法创建对象)@someguy2121您输入了所有不同的属性,不是吗(姓名、邮件等)?您的CSV是否使用逗号作为分隔符?(未指定,导入Csv采用逗号)您是在DC上运行此操作吗?如果不是,所有系统可能需要一段时间才能同步,因此您可能要到几分钟后才能看到新对象。我将正在运行的代码放入答案中,因为我的字符已用完。@someguy2121不要将我的答案复制为新答案。.您没有回答我的问题。请编辑您的问题,然后重试ost是csv的前几行。你用斜杠作为分隔符吗?我已经这样做了。