Powershell - New-Mailcontact и Set-Contact - PullRequest
0 голосов
/ 19 марта 2020

Я пытался написать сценарий, чтобы я мог создать New-Mailcontact, используя файл CSV, если он еще не существует в ActiveDirectory.

Если он уже существует в Active Directory, пропустите команду New-MailContact и просто запустите Set-MailContact.

Проблема в сценарии: -

  • Создается новый Mailcontact, если он еще не существует в AD, тогда, если mailcontact не существует в качестве члена группы, добавить учетную запись в группу. Если он уже существует, пропустите. Кроме того, новый почтовый контакт может состоять из 4 или 5 почтовых групп, в него будут добавлены 4 почтовые группы, называемые «1100-контакт», как показано ниже. будет добавлено 5 почтовых групп, называемых «1000-контактными», как показано ниже.

  • , если они уже существуют в Active Directory, например, я говорю как «contact2@contoso.com», как показано ниже. если это требуется, потому что уже может быть неправильное отображаемое имя в AD. он будет обновлять отображаемое имя на основе файла CSV снова, а затем уже контакт может быть членом Group-Mail1 и Group-Mail2, который он добавит в группы, если контакт не является членом какой-либо из этих групп Group-Mail5 и Group-Mail9.

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
}

1 Ответ

0 голосов
/ 20 марта 2020

Если я правильно понимаю вопрос, основная проблема заключается в том, что некоторые контакты необходимо добавить в 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...