Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [CmdletBinding()]
- param(
- [ValidateScript({Test-Path $_ -PathType Leaf})]
- [Parameter(Mandatory=$True,Position=1)][string]$XMLFile
- )
- Import-Module ActiveDirectory
- if(!(Get-PSSnapin |
- Where-Object {$_.name -eq "Microsoft.Exchange.Management.PowerShell.E2010"})) {
- ADD-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
- }
- $logfile = ".\ImportExchangeStructure.log"
- $domain = Get-ADDomain
- $addomain = $domain.Forest
- $domaindn = $domain.DistinguishedName
- $ou = "$addomain/Exchange/Distribution Lists"
- function writelog([string]$message) {
- $timestamp = Get-Date
- $fc = "White"
- if($message.contains("ERROR")) {$fc ="Red"}
- Add-content $logfile -value "$timestamp : $message"
- Write-Host $message -ForegroundColor $fc
- }
- function MBinDG([string]$lookinDG, [string]$findname) {
- Set-Variable -Name userexists -Value $false -Scope 0
- $userMB = Get-Mailbox $findname -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
- $lookinDGmbrs = Get-DistributionGroupMember -Identity $lookinDG -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
- $lookinDGmbrs | ForEach-Object {
- if($_.Name -eq $userMB.Name) { $userexists = $true }
- }
- return $userexists
- }
- $addomain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().Name
- $me = [Environment]::UserName
- $nl = "`r`n"
- [xml]$dglist = Get-Content $XMLFile
- ForEach($dg in $dglist.DistributionGroups.DistributionGroup) {
- $DisplayName = $dg.DisplayName.Replace("OLDDOMAIN","NEWDOMAIN")
- $Name = $dg.Name.Replace("OLDDOMAIN","NEWDOMAIN")
- $Alias = $dg.Alias.Replace("OLDDOMAIN","NEWDOMAIN")
- $ManagedBy = $dg.ManagedBy
- $ModeratedBy = $dg.ModeratedBy
- $Members = $dg.Members
- $testdg = Get-DistributionGroup $Alias -ErrorAction SilentlyContinue
- Write-Host "Name: $Name"
- Write-Host "Alias: $Alias"
- [String[]]$MemberList = ForEach($m in $Members.ReducedRecipient) {
- Set-Variable -Name testmb -Value $null -Scope 0
- Set-Variable -Name testdgm -Value $null -Scope 0
- $mbr = $m.PrimarySmtpAddress
- if($mbr -ne "" -and $mbr -ne $null) {
- $mbr = $mbr.Replace("OLDDOMAIN","NEWDOMAIN")
- if($mbr.Contains("contoso") -or $mbr.Contains("microsoft")) {
- $testmb = Get-Mailbox $mbr -ResultSize 1 -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
- $testdgm = Get-DistributionGroup $mbr -ResultSize 1 -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
- if($testmb -ne $null -or $testdgm -ne $null) {
- $mbr
- }
- else {
- writelog "ERROR: Could find mailbox or distribution group $mbr"
- }
- }
- }
- }
- [String[]]$ManagedByList = ForEach($m in $ManagedBy.ADMultiValuedProperty.ADObjectId) {
- Set-Variable -Name testmb -Value $null -Scope 0
- $mbr = $m.PrimarySmtpAddress
- if($mbr -ne "" -and $mbr -ne $null) {
- $mbr = $mbr.Replace("OLDDOMAIN","NEWDOMAIN")
- $testmb = Get-Mailbox $mbr -ResultSize 1 -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
- if($testmb -ne $null) {
- $mbr
- }
- }
- }
- [String[]]$ModeratedByList = ForEach($m in $ModeratedBy.ADMultiValuedProperty.ADObjectId) {
- Set-Variable -Name testmb -Value $null -Scope 0
- $mbr = $m.PrimarySmtpAddress
- if($mbr -ne "" -and $mbr -ne $null) {
- $mbr = $mbr.Replace("OLDDOMAIN","NEWDOMAIN")
- $testmb = Get-Mailbox $mbr -ResultSize 1 -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
- if($testmb -ne $null) {
- $mbr
- }
- }
- }
- $mc = $MemberList.Count
- if($ManagedByList -eq $null) {
- [String[]]$ManagedByList = @($me)
- }
- Write-Host "Members ($mc members): $MemberList"
- Write-Host "Managed By: $ManagedByList"
- Write-Host "Moderated By: $ModeratedByList"
- If($testdg -eq $null) {
- writelog "Creating Distribution Group $DisplayName"
- New-DistributionGroup $Name -Alias $Alias -DisplayName $DisplayName -ManagedBy $ManagedByList `
- -ModeratedBy $ModeratedByList -Members $MemberList -Type Distribution -OrganizationalUnit $ou
- }
- else {
- ForEach($mdn in $MemberList) { if($mdn -ne $null) {
- if($mdn.Trim() -ne "") {
- $useralreadyexists = MBinDG $Alias $mdn
- if($useralreadyexists -eq $false) {
- writelog "Adding $mdn to $DisplayName"
- Add-DistributionGroupMember $Name -Member $mdn -BypassSecurityGroupManagerCheck -ErrorAction SilentlyContinue
- }
- }
- } }
- }
- Write-Host $nl
- }
- $dglist = $null
- [gc]::collect()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement