Search code examples
powershellexchange-server

Exchange PowerShell: How to pass multiple value, by variable, to -Members (or -ManagedBy) parameter of New-DistributionGroup command


I've done the following script in Exchange PowerShell to add more than 1 new distribution groups in exchenge by powershell and add multiple members in them, all at once:

# bulk_DistributionGroup1.ps1
# Connessione al server Exchange con remote PowerShell
Set-ExecutionPolicy RemoteSigned
$userCredential = Get-Credential -credential com_spoleto\rossetti.admin
$session = New-PSSession `
     -ConfigurationName  Microsoft.Exchange `
     -ConnectionUri http://srvexch13.comune.spoleto.local/PowerShell/ `
     -Authentication Kerberos `
     -Credential $userCredential `
      -AllowRedirection
Import-PSSession $session -AllowClobber -DisableNameChecking

# Importa il modulo active directory per usare comandi AD
Import-Module activedirectory

# Memorizzo i dati da bulk_DistributionGroup1.csv nella variabile $adDistGroup
$adDistGroup = Import-csv "E:\BATCH\Bulk_AD_MX\bulk_DistributionGroup1.csv"
# Memorizzo i dati da bulk_DistributionGroupmember1.csv nella variabile $adDistGroupMember
$adDistGroupMember = Import-csv "E:\BATCH\Bulk_AD_MX\bulk_DistributionGroupMember1.csv"

#Ciclo ogni riga che contiene i dettagli di un gruppo di distribuzione nel file CSV 
$members = ""
foreach ($adGroup in $adDistGroup)
{
    foreach ($member in $adDistGroupMember)
    {
        if ($adGroup.name -eq $member.groupName)
        {
            $members = $members + ", " + """" + $member.member + """"
        }
    }
    $members = $members.Substring(2)
    New-DistributionGroup `
        -Name $adGroup.name `
        -Alias $adGroup.alias `
        -CopyOwnerToMember `
        -ManagedBy $adGroup.managedBy `
        -MemberDepartRestriction closed `
        -MemberJoinRestriction closed `
        -Members ${members} `
        -ModerationEnabled $false `
        -OrganizationalUnit $adGroup.OU `
        -PrimarySmtpAddress $adGroup.primarySMTPAddress `
        -Type $adGroup.type
    $members = ""
}

# Rimuovo la sessione Exchange
Remove-PSSession $session
Set-ExecutionPolicy Unrestricted

and two .csv files one for passing values to the script (view the attached screenshot), but my script doesn't work returning the following error:

PS C:\WINDOWS\system32> E:\BATCH\Bulk_AD_MX\bulk_DistributionGroup1.ps1

ModuleType Version    Name                                ExportedCommands                                                                                                                                                                                                     
---------- -------    ----                                ----------------                                                                                                                                                                                                     
Script     1.0        tmp_gwg10zng.lky                    {Add-ADPermission, Add-AvailabilityAddressSpace, Add-ContentFilterPhrase, Add-DatabaseAvailabilityGroupServer...}                                                                                                    
Impossibile trovare il destinatario ""name1.surname1", "name2.surname2"". Assicurarsi che non siano presenti errori di digitazione o specificare un oggetto diverso.
    + CategoryInfo          : NotSpecified: (:) [New-DistributionGroup], ManagementObjectNotFoundException
    + FullyQualifiedErrorId : [Server=SRVEXCH13,RequestId=50679cad-e892-476e-a08c-f4e38475b793,TimeStamp=12/08/2021 07:24:56] [FailureCategory=Cmdlet-ManagementObjectNotFoundException] 3CCBFD1E,Microsoft.Exchange.Management.RecipientTasks.NewDistributionGroup
    + PSComputerName        : srvexch13.xxxxxx.yyyyyyy.local
 
Impossibile trovare il destinatario ""name3.surname3", "name4.surname4"". Assicurarsi che non siano presenti errori di digitazione o specificare un oggetto diverso.
    + CategoryInfo          : NotSpecified: (:) [New-DistributionGroup], ManagementObjectNotFoundException
    + FullyQualifiedErrorId : [Server=SRVEXCH13,RequestId=2ddfac63-b7be-48b4-b076-083d54dc78af,TimeStamp=12/08/2021 07:24:56] [FailureCategory=Cmdlet-ManagementObjectNotFoundException] EC351391,Microsoft.Exchange.Management.RecipientTasks.NewDistributionGroup
    + PSComputerName        : srvexch13.xxxxxx.yyyyyyy.local

I there is anyone can help me please?

Thanks in advance. enter image description here


Solution

  • Change $members to be an array of member names, instead of a single string:

    # define array
    $members = @()
    
    foreach ($adGroup in $adDistGroup)
    {
        foreach ($member in $adDistGroupMember)
        {
            if ($adGroup.name -eq $member.groupName)
            {
                # add matching member names to the array
                $members += $member.member
            }
        }
        
        New-DistributionGroup `
            -Name $adGroup.name `
            -Alias $adGroup.alias `
            -CopyOwnerToMember `
            -ManagedBy $adGroup.managedBy `
            -MemberDepartRestriction closed `
            -MemberJoinRestriction closed `
            -Members ${members} `
            -ModerationEnabled $false `
            -OrganizationalUnit $adGroup.OU `
            -PrimarySmtpAddress $adGroup.primarySMTPAddress `
            -Type $adGroup.type
        # Clear array by creating a new empty one
        $members = @()
    }