首页 > 解决方案 > Powershell - New-Mailcontact 和 Set-Contact

问题描述

我一直在尝试编写一个脚本,以便可以使用 CSV 文件创建 New-Mailcontact,如果 ActiveDirectory 中不存在的话。

如果 Active Directory 中已经存在,则跳过 New-MailContact 命令并运行 Set-MailContact。

脚本中的问题: -

CSV:

Name,ExternalEmailAddress,group1,group2,group3,group4,group5
1000-contact,contact1@contoso.com,Group-Mail1,Group-Mail2,Group-Mail3,Group-Mail4,Group-Mail5
1100-contact,contact3@contoso.com,Group-Mail1,Group-Mail2,Group-Mail3,Group-Mail4
1200-contact,contact2@contoso.com,Group-Mail1,Group-Mail2,Group-Mail5,Group-Mail9

到目前为止我已经尝试过脚本:

Import-Csv C:\temp\ExternalContacts.csv|
foreach-object{
if (Get-MailContact -anr $_.ExternalEmailAddress) 
{
write-host $_.name 'is a duplicate entry!!!'

    Set-MailContact -Identity $_.ExternalEmailAddress -DisplayName $_.Name -ForceUpgrade -Confirm:$False
    Add-DistributionGroupMember -Identity "$($_.group1)" -Member $_.ExternalEmailAddress
    Add-DistributionGroupMember -Identity "$($_.group2)" -Member $_.ExternalEmailAddress
    Add-DistributionGroupMember -Identity "$($_.group3)" -Member $_.ExternalEmailAddress
    Add-DistributionGroupMember -Identity "$($_.group4)" -Member $_.ExternalEmailAddress
    Add-DistributionGroupMember -Identity "$($_.group5)" -Member $_.ExternalEmailAddress
}       
else {


    New-MailContact -Name $_.Name -DisplayName $_.Name -ExternalEmailAddress $_.ExternalEmailAddress -OrganizationalUnit "OU=company_Contacts,OU=Contacts,DC=contoso,DC=com"

    Add-DistributionGroupMember -Identity "$($_.group1)" -Member $_.ExternalEmailAddress
    Add-DistributionGroupMember -Identity "$($_.group2)" -Member $_.ExternalEmailAddress
    Add-DistributionGroupMember -Identity "$($_.group3)" -Member $_.ExternalEmailAddress
    Add-DistributionGroupMember -Identity "$($_.group4)" -Member $_.ExternalEmailAddress
    Add-DistributionGroupMember -Identity "$($_.group5)" -Member $_.ExternalEmailAddress

}
}

更新 :

我想注意你的 csv 中的空格。因此,如果 group5 为空,这将处理为空。我对么 ?

if ($_.group5) {
    Add-DistributionGroupMember -Identity $_.group5 -Member $ExternalEmailAddress
}

标签: powershell

解决方案


如果我正确理解这个问题,主要问题是一些联系人需要添加到 4,而另一些联系人需要添加到 5 个通讯组。

未经测试,但这可能对您有用:

Import-Csv -Path 'C:\temp\ExternalContacts.csv' | ForEach-Object {
    # try and find the contact
    $contact = Get-MailContact -Filter "EmailAddress -eq '$($_.ExternalEmailAddress)'" -ErrorAction SilentlyContinue
    if ($contact) {
        if ($_.Name -ne $contact.DisplayName) {
            Write-Host "Renaming contact $($contact.DisplayName) to $($_.Name)"
            Set-MailContact -Identity $_.ExternalEmailAddress -DisplayName $_.Name -ForceUpgrade -Confirm:$False
        }
        else {
            Write-Host "Contact $($_.Name) already exists"
        }
    }
    else {
        Write-Host "Creating new contact $($_.Name)"
        $contactParams = @{
            Name                 = $_.Name
            DisplayName          = $_.Name
            ExternalEmailAddress = $_.ExternalEmailAddress
            OrganizationalUnit   = "OU=company_Contacts,OU=Contacts,DC=contoso,DC=com"
        }
        New-MailContact @contactParams
    }

    # get an array of groups this user should be a member of
    $groups  = ($_.PsObject.Properties.GetEnumerator() | Where-Object { $_.Name -like 'group*' -and ($null -ne $_.Value) }).Value
    # add the contact to the appropriate groups
    foreach ($group in $groups) {
        Add-DistributionGroupMember -Identity $group -Member $_.ExternalEmailAddress
    }
}

推荐阅读