AvailableTeamNumbersReport.ps1
<#PSScriptInfo .VERSION 2.0 .GUID be53af09-7831-40cc-92a2-0a72b3fa7c1b .AUTHOR Vikas Sukhija .COMPANYNAME Techwizard.cloud .COPYRIGHT Techwizard.cloud .TAGS .LICENSEURI https://techwizard.cloud/2021/05/31/available-team-numbers-report/ .PROJECTURI https://techwizard.cloud/2021/05/31/available-team-numbers-report/ .ICONURI .EXTERNALMODULEDEPENDENCIES MicrosoftTeams .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES https://techwizard.cloud/2021/05/31/available-team-numbers-report/ .PRIVATEDATA #> #Requires -Module MicrosoftTeams <# .DESCRIPTION This will report the available phone numbers in Microsoft Teams #> param ( [string]$smtpserver, [string]$erroremail, [string]$from ) ###################Functions############################ function New-FolderCreation { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string]$foldername ) $logpath = (Get-Location).path + "\" + "$foldername" $testlogpath = Test-Path -Path $logpath if($testlogpath -eq $false) { #Start-ProgressBar -Title "Creating $foldername folder" -Timer 10 $null = New-Item -Path (Get-Location).path -Name $foldername -Type directory } } function Write-Log { [CmdletBinding()] param ( [Parameter(Mandatory = $true,ParameterSetName = 'Create')] [array]$Name, [Parameter(Mandatory = $true,ParameterSetName = 'Create')] [string]$Ext, [Parameter(Mandatory = $true,ParameterSetName = 'Create')] [string]$folder, [Parameter(ParameterSetName = 'Create',Position = 0)][switch]$Create, [Parameter(Mandatory = $true,ParameterSetName = 'Message')] [String]$message, [Parameter(Mandatory = $true,ParameterSetName = 'Message')] [String]$path, [Parameter(Mandatory = $false,ParameterSetName = 'Message')] [ValidateSet('Information','Warning','Error')] [string]$Severity = 'Information', [Parameter(ParameterSetName = 'Message',Position = 0)][Switch]$MSG ) switch ($PsCmdlet.ParameterSetName) { "Create" { $log = @() $date1 = Get-Date -Format d $date1 = $date1.ToString().Replace("/", "-") $time = Get-Date -Format t $time = $time.ToString().Replace(":", "-") $time = $time.ToString().Replace(" ", "") New-FolderCreation -foldername $folder foreach ($n in $Name) {$log += (Get-Location).Path + "\" + $folder + "\" + $n + "_" + $date1 + "_" + $time + "_.$Ext"} return $log } "Message" { $date = Get-Date $concatmessage = "|$date" + "| |" + $message +"| |" + "$Severity|" switch($Severity){ "Information"{Write-Host -Object $concatmessage -ForegroundColor Green} "Warning"{Write-Host -Object $concatmessage -ForegroundColor Yellow} "Error"{Write-Host -Object $concatmessage -ForegroundColor Red} } Add-Content -Path $path -Value $concatmessage } } } #Function Write-Log #####################logs and reports################### $log = Write-Log -Name "AvailableTeamNumbersReport-Log" -folder "logs" -Ext "log" $Report1 = Write-Log -Name "AvailableTeamNumbersReport-Report" -folder "Report" -Ext "csv" $collection = @() ######connect to Skob and import modules ################################### Write-Log -message "Start..................Script" -path $log try { Connect-MicrosoftTeams Write-Log -Message "Connected to Teams module" -path $log } catch { $exception = $($_.Exception.Message) Write-Log -Message "$exception" -path $log -Severity Error Write-Log -Message "Exception has occured in connecting to Teams module" -path $log -Severity Error Send-MailMessage -SmtpServer $smtpserver -From $from -To $erroremail -Subject "Error occured in connecting to Teams module - AvailableTeamNumbersReport" -Body $($_.Exception.Message) Exit; } ##################start processing users################## try { $allnumbers =Get-CsPhoneNumberAssignment -Top 100000 | Select TelephoneNumber,NumberType,ActivationState,City,IsoCountryCode,IsoSubdivision,PortInOrderStatus,PstnAssignmentStatus,PstnPartnerName Write-Log -message "Fetched Phonenumbers $($allnumbers.count) from Teams" -path $log $allassignednumbers = $allnumbers | where{$_.PstnAssignmentStatus -ne 'Unassigned'} Write-Log -message "Fetched Assigned Phonenumbers $($allassignednumbers.count) from Teams" -path $log $allunassignednumbers = $allnumbers | where{$_.PstnAssignmentStatus -eq 'Unassigned'} Write-Log -message "Fetched unAssigned Phonenumbers $($allunassignednumbers.count) from Teams" -path $log $getllcsonlineusernumbers = Get-CsOnlineUser -Filter {LineURI -ne $null} | Select UserprincipalName, LineURI Write-Log -message "Fetched all assigned users $($getllcsonlineusernumbers.count) from Teams" -path $log ############## adding as error is not geteingr eported and less numbers are fetched############# if($($allnumbers.count) -lt "8000"){ Send-MailMessage -SmtpServer $smtpserver -From $from -To $erroremail -Subject "Error occured getting details from TEAMS AvailableTeamNumbersReport" -Body "Error occured getting details from TEAMS AvailableTeamNumbersReport" exit } } catch { $exception = $($_.Exception.Message) Write-Log -Message "$exception" -path $log -Severity Error Write-Log -Message "Exception has occured getting details from TEAMS" -path $log -Severity Error Send-MailMessage -SmtpServer $smtpserver -From $from -To $erroremail -Subject "Error occured getting details from TEAMS AvailableTeamNumbersReport" -Body $($_.Exception.Message) Exit; } ##########Export to Report################################# Write-Log -Message "Start exporting Report" -path $log [System.Collections.ArrayList]$collection = @() ForEach($voicenumber in $allnumbers) { $mcoll = "" | Select-Object TelephoneNumber,TargetType,NumberType, ActivationState, City,IsoCountryCode,IsoSubdivision,PortInOrderStatus, PstnAssignmentStatus,PstnPartnerName $mcoll.TelephoneNumber = $voicenumber.TelephoneNumber $mcoll.NumberType = $voicenumber.NumberType $mcoll.ActivationState = $voicenumber.ActivationState $mcoll.City = $voicenumber.City $mcoll.IsoCountryCode = $voicenumber.IsoCountryCode $mcoll.IsoSubdivision = $voicenumber.IsoSubdivision $mcoll.PortInOrderStatus = $voicenumber.PortInOrderStatus $mcoll.PstnAssignmentStatus = $voicenumber.PstnAssignmentStatus $mcoll.PstnPartnerName = $voicenumber.PstnPartnerName if($voicenumber.PstnAssignmentStatus -eq "UserAssigned"){ $lineuri = $assigneduser = $null $lineuri = "tel:" + $voicenumber.TelephoneNumber $assigneduser = $getllcsonlineusernumbers | where{$_.LineURI -eq $lineuri} | select userprincipalname $mcoll.TargetType = $assigneduser.userprincipalname } $collection.Add($mcoll) | out-null } Write-Log -Message "Data collected, export to CSV" -path $log $collection | Export-Csv $Report1 -NoTypeInformation Disconnect-MicrosoftTeams ##############################Recycle Logs########################## Write-Log -Message "Recycle Logs" -path $log -Severity Information Write-Log -message "Finish..................Script" -path $log Send-MailMessage -SmtpServer $smtpserver -From $from -To $erroremail -Subject "Report - AvailableTeamNumbersReport" -Body "Report - AvailableTeamNumbersReport" -Attachments $report1 ############################################################################################# |