Create NEW_Assign_Teams_AU_or_NZ_DDI.ps1

This commit is contained in:
DistractADD
2024-02-02 09:01:27 +10:00
parent e326cd97c0
commit 3c467462e8

View File

@@ -0,0 +1,172 @@
$MainMenu = {
Write-Host " ************************************************"
Write-Host " * Assign Teams Calling Number to AU or NZ User *"
Write-Host " ************************************************"
Write-Host
Write-Host " 1.) Connect To Teams Online"
Write-Host " 2.) Export Currently Assigned Numbers"
Write-Host " 3.) Assign AU Number"
Write-Host " 4.) Assign NZ Number"
Write-Host " 5.) Quit"
Write-Host
Write-Host " Select an option and press Enter: " -nonewline
}
cls
$psc = '@pscconsulting.com'
Do {
cls
Invoke-Command $MainMenu
$Select = Read-Host
Switch ($Select)
{
1 {
Write-Host "Checking For Teams Module"
if (Get-Module -ListAvailable -Name MicrosoftTeams) {
Write-Host "MicrosoftTeams Module Already Installed - Importing"
Import-Module MicrosoftTeams
Connect-MicrosoftTeams
}
else {
Write-Host "MicrosoftTeams Module does not exist - Installing"
Install-Module MicrosoftTeams -Force -AllowClobber
Import-Module MicrosoftTeams
Connect-MicrosoftTeams
}
}
2 {
function Write-ProgressHelper {
param (
[int]$StepNumber,
[string]$Message
)
Write-Progress -Activity 'Export All Current DDI Numbers That Are In Use to C:\Temp\' -Status $Message -PercentComplete (($StepNumber / $steps) * 100)
}
$script:steps = ([System.Management.Automation.PsParser]::Tokenize((gc "$PSScriptRoot\$($MyInvocation.MyCommand.Name)"), [ref]$null) | where { $_.Type -eq 'Command' -and $_.Content -eq 'Write-ProgressHelper' }).Count
$stepCounter = 0
Write-ProgressHelper -Message 'Checking For Temp Direcory' -StepNumber ($stepCounter++)
Start-Sleep -Seconds 2.5
$ErrorActionPreference="SilentlyContinue"
#Check If Directory Exists #############
$DirectoryToCreate = "C:\Temp\"
if (-not (Test-Path -LiteralPath $DirectoryToCreate)) {
Write-Host "Directory does not exist - creating..."
New-Item -Path $DirectoryToCreate -ItemType Directory -ErrorAction Stop | Out-Null #-Force
Write-Host "Successfully created directory '$DirectoryToCreate'."
}
else {
Write-Host "Directory already exists"
}
Write-ProgressHelper -Message 'Checking For Temp Direcory' -StepNumber ($stepCounter++)
Start-Sleep -Seconds 2.5
#Connect to Teams
Write-Host "Connecting to MS Teams"
Connect-MicrosoftTeams
Write-ProgressHelper -Message 'Getting Used Numbers and Exporting to CSV' -StepNumber ($stepCounter++)
Start-Sleep -Seconds 2.5
#Settings ##############################
#. "_Settings.ps1" | Out-Null
$FileName = "TeamsAssignedNumbers_" + (Get-Date -Format s).replace(":","-") +".csv"
$FilePath = "C:\Temp\$FileName"
$OutputType = "CSV" #OPTIONS: CSV - Outputs CSV to specified FilePath, CONSOLE - Outputs to console
##############################
$Regex1 = '^(?:tel:)?(?:\+)?(\d+)(?:;ext=(\d+))?(?:;([\w-]+))?$'
$Array1 = @()
#Get Users with LineURI
$UsersLineURI = Get-CsOnlineUser -Filter {LineURI -ne $Null}
if($UsersLineURI -ne $null)
{
foreach($item in $UsersLineURI)
{
$Matches = @()
$Item.LineURI -match $Regex1 | out-null
$myObject1 = New-Object System.Object
$myObject1 | Add-Member -type NoteProperty -name "LineURI" -Value $Item.LineURI
$myObject1 | Add-Member -type NoteProperty -name "DDI" -Value $Matches[1]
# $myObject1 | Add-Member -type NoteProperty -name "Ext" -Value $Matches[2]
$myObject1 | Add-Member -type NoteProperty -name "DisplayName" -Value $Item.DisplayName
# $myObject1 | Add-Member -type NoteProperty -name "FirstName" -Value $Item.FirstName
# $myObject1 | Add-Member -type NoteProperty -name "LastName" -Value $Item.LastName
$myObject1 | Add-Member -type NoteProperty -name "Type" -Value "User"
$Array1 += $myObject1
}
}
#Get meeting room numbers
$MeetingRoomLineURI = Get-CsMeetingRoom -Filter {LineURI -ne $Null}
if($MeetingRoomLineURI -ne $null)
{
Write-Verbose "Processing Meeting Room Numbers"
foreach($Item in $MeetingRoomLineURI)
{
$Matches = @()
$Item.LineURI -match $Regex1 | out-null
$myObject1 = New-Object System.Object
$myObject1 | Add-Member -type NoteProperty -name "LineURI" -Value $Item.LineURI
$myObject1 | Add-Member -type NoteProperty -name "DDI" -Value $Matches[1]
$myObject1 | Add-Member -type NoteProperty -name "Ext" -Value $Matches[2]
$myObject1 | Add-Member -type NoteProperty -name "DisplayName" -Value $Item.DisplayName
$myObject1 | Add-Member -type NoteProperty -name "Type" -Value "MeetingRoom"
$Array1 += $myObject1
}
}
#Get online resource accounts
$OnlineApplicationInstanceLineURI = Get-CsOnlineApplicationInstance | where {$_.PhoneNumber -ne $Null}
if($OnlineApplicationInstanceLineURI -ne $null)
{
Write-Verbose "Processing Online Application Instances (Resource Accounts) Numbers"
foreach($Item in $OnlineApplicationInstanceLineURI)
{
$Matches = @()
$Item.PhoneNumber -match $Regex1 | out-null
$myObject1 = New-Object System.Object
$myObject1 | Add-Member -type NoteProperty -name "LineURI" -Value $Item.PhoneNumber
$myObject1 | Add-Member -type NoteProperty -name "DDI" -Value $Matches[1]
$myObject1 | Add-Member -type NoteProperty -name "Ext" -Value $Matches[2]
$myObject1 | Add-Member -type NoteProperty -name "DisplayName" -Value $Item.DisplayName
$myObject1 | Add-Member -type NoteProperty -name "Type" -Value $(if ($item.ApplicationId -eq "ce933385-9390-45d1-9512-c8d228074e07") {"Auto Attendant Resource Account"} elseif ($item.ApplicationId -eq "11cd3e2e-fccb-42ad-ad00-878b93575e07") {"Call Queue Resource Account"} else {"Unknown Resource Account"})
$Array1 += $myObject1
}
}
if($OutputType -eq "CSV")
{
$Array1 | export-csv $FilePath -NoTypeInformation
Write-Host "ALL DONE!! Your file has been saved to $FilePath."
}
elseif($OutputType -eq "CONSOLE")
{
$Array1 | FT -AutoSize -Property LineURI,DDI,Ext,DisplayName,Type
Write-Host "ALL DONE!!"
}
else
{
$Array1 | FT -AutoSize -Property LineURI,DDI,Ext,DisplayName,Type
Write-Host "WARNING: Valid output type not set, defaulted to console."
Read-Host -Prompt "Press any key to continue..."
}
}
3 {
$firstname = Read-Host -Prompt "Enter User First Name"
$lastname = Read-Host -Prompt "Enter User Last Name"
$AUPhone = Read-Host -Prompt "Enter User Phone Number, Including Single Digit Area Code Only. Country Code Not Required"
$Name = "$firstname.$lastname@pscconsulting.com"
Set-CsPhoneNumberAssignment -Identity $Name -PhoneNumber +61$AUPhone -PhoneNumberType DirectRouting
Set-CsPhoneNumberAssignment -Identity $Name -EnterpriseVoiceEnabled $true
Grant-CsOnlineVoiceRoutingPolicy -Identity $Name -PolicyName MacTelAustralia
Read-Host -Prompt "Press any key to continue..."
}
4 {
$firstname = Read-Host -Prompt "Enter User First Name"
$lastname = Read-Host -Prompt "Enter User Last Name"
$NZPhone = Read-Host -Prompt "Enter User Phone Number, Including Single Digit Area Code Only. Country Code Not Required"
$Name = "$firstname.$lastname@pscconsulting.com"
Set-CsPhoneNumberAssignment -Identity $Name -PhoneNumber +64$NZPhone -PhoneNumberType DirectRouting
Set-CsPhoneNumberAssignment -Identity $Name -EnterpriseVoiceEnabled $true
Grant-CsOnlineVoiceRoutingPolicy -Identity $Name -PolicyName "Vocus NZ International"
Read-Host -Prompt "Press any key to continue..."
}
}
}
While ($Select -ne 5)