MitelNPUMTools.psm1

<#
.SYNOPSIS
Uploads and activates Mitel NuPoint voicemail greetings on individual mailboxes
  
.DESCRIPTION
The Set-NPUMMailboxGreeting cmdlet will upload all wav files in the C:\Greetings folder and request the mailbox number to activate it on.
 
The Posh-SSH module must be installed. To do this on Powershell v4 and above run the following command 'install-module -Name Posh-SSH'
 
Greetings must be in the below format.
CCITT u-law, 8KHz, 8 bit, mono.
 
.PARAMETER ComputerName
FQDN or IP Address of MSL server to create connection
 
.EXAMPLE
Set-NPUMMailBoxGreeting 192.168.1.10
 
.NOTES
A folder called Greetings needs to be created on the C Drive of your computer and the properly formated WAV files placed in here for upload. The upload
procedure will also delete these files so make sure they are a copy and orginial placed somewhere for safe keeping.
You will be prompted for the mailbox number for each file as it is being uploaded.
SSH must be enabled on the MSL server.
 
.Link
Posh-SSH
 
#>

Function Set-NPUMMailboxGreeting
{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True, HelpMessage="FQDN or IP Address of MSL Server")]
        [Alias('ComputerName', 'Host', 'IPAddress')]
        [string]$MSLServer
    )

    If (!(Get-Module -ListAvailable Posh-SSH))
    {
        Write-Output "You must install the Posh-SSH module before you can continue"
        Write-Output "Y Install Posh-SSH"
        Write-Output "N Quit"
        do
        {
            $input = Read-Host "Do you want to install Posh-SSH?"
            switch ($input)
            {
                "Y" {Install-Module -Name Posh-SSH -Force
                    Import-Module -Name Posh-SSH}
                "N" {Return}
            }
        } While ($True)
    }

    $FilePath = "C:\Greetings"
    $Credentials = Get-Credential root
        
    New-SFTPSession -ComputerName $MSLServer -Credential $Credentials
    New-SshSession -ComputerName $MSLServer -Credential $Credentials

    Invoke-SSHCommand -SessionId 0 -Command "mkdir /tmp/vf"

    ForEach ($File in (Get-ChildItem -Path (Join-Path $FilePath -ChildPath *.wav)))
    {
        If ($File.Name.Contains(' '))
        {
            $File = Rename-Item -Path $File -NewName ($File.Name -replace ' ', '_')
        }
        $MailboxNumber = Read-Host "What mailbox number does "$File.Name" need to be uploaded to?"
        Set-SFTPFile -SessionId 0 -LocalFile $File -RemotePath /tmp/vf
        $FileName = '"/tmp/vf/' + $File.Name + '"'
        Invoke-SshCommand -SessionId 0 -Command "agreet_copy cmd=f m=$FileName m2=$MailboxNumber dg=1"
        Remove-Item $File
    }

    Invoke-SSHCommand -SessionId 0 -Command "rm /tmp/vf/*.wav"
    Invoke-SSHCommand -SessionId 0 -Command "rmdir /tmp/vf"
    Remove-SFTPSession -Index 0
    Remove-SshSession -Index 0
}



<#
.SYNOPSIS
Bulk upload, import and activation of Mitel NuPoint voicemail greetings
 
.DESCRIPTION
The Set-BulkNPUMMailboxGreeting cmdlet will upload all wav files in the C:\Greetings folder and use the mbs.csv to activate each against the correct mailbox.
 
The Posh-SSH module must be installed. To do this on Powershell v4 and above run the following command 'install-module -Name Posh-SSH'
 
Greetings must be in the below format.
CCITT u-law, 8KHz, 8 bit, mono.
 
A csv file named mbs.csv needs to be stored in the C:\Greetings folder along with the greetings. The csv needs to have two columns, one named 'Mailbox' and the other 'File'
Mailbox is the mailbox number for the user and file is the file name of the new greeting.
e.g.
Mailbox | File
--------|----------
1460 | 1460_John.wav
1678 | Jim1678.wav
 
.PARAMETER ComputerName
FQDN or IP Address of MSL server to create connection
 
.EXAMPLE
Set-BulkNPUMMailboxGreeting 192.168.1.10
 
.NOTES
A folder called Greetings needs to be created on the C Drive of your computer and the properly formated WAV files placed in here for upload. The upload
procedure will also delete these files so make sure they are a copy and orginial placed somewhere for safe keeping.
You will be prompted for the mailbox number for each file as it is being uploaded.
SSH must be enabled on the MSL server.
 
.Link
Posh-SSH
 
#>

Function Set-BulkNPUMMailboxGreeting
{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True, HelpMessage="FQDN or IP Address of MSL Server")]
        [Alias('ComputerName', 'Host', 'IPAddress')]
        [string]$MSLServer
    )

    If (!(Get-Module -ListAvailable Posh-SSH))
    {
        Write-Output "You must install the Posh-SSH module before you can continue"
        Write-Output "Y Install Posh-SSH"
        Write-Output "N Quit"
        do
        {
            $input = Read-Host "Do you want to install Posh-SSH?"
            switch ($input)
            {
                "Y" {Install-Module -Name Posh-SSH -Force
                    Import-Module -Name Posh-SSH}
                "N" {Return}
            }
        } While ($True)
    }

    $FilePath = "C:\Greetings"

    If (Get-ChildItem $FilePath | Where-Object { $_.Name.Contains(' ')})
    {
        Write-Output "Filenames cannot include spaces, please change and try again"
        Write-Output "Dont forget to update the csv file with the new filename"
        return
    }

    $Credentials = Get-Credential root
    
    New-SFTPSession -ComputerName $MSLServer -Credential $Credentials
    New-SshSession -ComputerName $MSLServer -Credential $Credentials

    Invoke-SSHCommand -SessionId 0 -Command "mkdir /tmp/vf"

    foreach ($File in (Get-ChildItem -Path (Join-Path $FilePath -ChildPath *.wav)))
    {
        $FileName = '"/tmp/vf/' + $File.Name + '"'
        Set-SFTPFile -SessionId 0 -LocalFile $File -RemotePath /tmp/vf
        Remove-Item $File

    }
    
    $csvImport = Import-Csv $FilePath + \mbs.csv
    foreach ($item in $csvImport)
    {
        $File = $item.File
        $Mailbox = $item.Mailbox
        $FileName = '"/tmp/vf/' + $File + '"'
        Invoke-SshCommand -ComputerName $Server -Command "agreet_copy cmd=f m=$FileName m2=$Mailbox dg=1"
    }
    
    Invoke-SSHCommand -SessionId 0 -Command "rm /tmp/vf/*.wav"
    Invoke-SSHCommand -SessionId 0 -Command "rmdir /tmp/vf"
    Remove-SFTPSession -Index 0
    Remove-SshSession -Index 0
}