param ( [string]$projectId = $(Read-Host "Enter project ID"), [string]$csv = $(Read-Host "Enter CSV file name"), [string]$user = $null, [string]$password = $null ) # Load powershell SDK try { if (!(Get-Command Get-MW_Ticket -ErrorAction SilentlyContinue)) { Import-Module 'C:\Program Files (x86)\BitTitan\BitTitan PowerShell\BitTitanPowerShell.dll' } } catch { Write-Host "Could not load BitTitanPowerShell SDK. Please check that it is installed." -ForegroundColor red Exit } # Get ticket if (!$user -or !$password) { Write-Host "Enter MigrationWiz account credentials" $creds = Get-Credential } else { $secureStringPassword = ConvertTo-SecureString -String $password -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential($user, $secureStringPassword) } $mwTicket = Get-MW_Ticket -Credentials $creds if (!$mwTicket) { Write-Host "Cannot retrieve Ticket." -ForegroundColor red Exit } # Read advanced options from csv if (!(Test-Path $csv)) { Write-Host "Cannot find csv file." -ForegroundColor red Exit } $csvContent = Import-Csv -path $csv if (($csvContent.Source -eq $null) -or ($csvContent.Destination -eq $null)) { Write-Host "Invalid csv format, please ensure you have two columns with the header Source, Destination." -ForegroundColor red Exit } $invalidRows = $csvContent | Where-Object {!$_.Source -or !$_.Destination} if ($invalidRows) { Write-Host "Invalid rows found in csv:" -ForegroundColor red Write-Host $invalidRows Exit } $advancedOptions = $csvContent | % {"UserMapping=""$($_.Source)->$($_.Destination)"""} # Get mailbox connector $mailboxConnector = Get-MW_MailboxConnector -Ticket $mwTicket -Id $projectId if (!$mailboxConnector) { Write-Host "Cannot find project." -ForegroundColor red Exit } # Calculate new advanced options $advancedOptions = ($advancedOptions | Select -Unique) $numExistingOptions = 0 $newOptions = $advancedOptions if ($mailboxConnector.AdvancedOptions) { $existingOptions = $mailboxConnector.AdvancedOptions.Split(" ") $newOptions = $advancedOptions | Where-Object {!$existingOptions.Contains($_)} $numExistingOptions = $existingOptions.count $advancedOptions = $existingOptions + $newOptions } $advancedOptionsString = $advancedOptions -Join " " # Check if no new options if ($newOptions.count -eq 0) { Write-Host "0 new User Mappings added." -ForegroundColor red Exit } # Set advanced options try { $mailboxConnector = Set-MW_MailboxConnector -Ticket $mwTicket -MailboxConnector $mailboxConnector -AdvancedOptions $advancedOptionsString $numAddedOptions = $advancedOptions.count - $numExistingOptions Write-Host "All Options:" -ForegroundColor yellow Write-Host ($newOptions | Out-String) -ForegroundColor yellow Write-Host "$numAddedOptions new User Mapping(s) added." -ForegroundColor yellow } catch { Write-Host "Failed to set options " $_.Exception.Message -ForegroundColor red Exit }