Thursday, August 3, 2017

Tips and Tricks / Unofficial Party and Sweepstakes list for Microsoft Ignite 2017


Every year there has been a Microsoft Ignite, it has sold out. Don't delay registration. The Microsoft Ignite 2017 website already indicates there are limited passes available.

At the time of writing this blog, there are only a couple of conference discounted hotels with rooms available. If you find that those hotels don't work for you, you might take a look at Airbnb, there are still a number of options around the Orange County Convention Center available.

Choosing Sessions

Microsoft as of August 15th has released the Schedule Builder. Once you go to Myignite you will want to choose "Personalize Schedules" and start to filter and select sessions that interest you. I didn't bother with trying to determine which sessions conflicted with others on my first pass, I just simply selected anything that looked interesting to me. Then later I went by into "My Conference -> My Schedule" and whittled things down.

If you really want a cool way to look at all the sessions @tyGraphTweets built a PowerBI mashup of the Sessions and it is awesome way to slice and dice things.

Taking Notes and Recording during Sessions

Microsoft does provide a video with the slide deck for most of the sessions that can then be later referenced, if you can't quite remember that one little detail.

If you are really bent on recording sessions, I'd suggest using a Jabra Speak 410/510 (or similar devce) with OneNote. If you have the Bluetooth version you might even get permission to put it up near where the speaker is speaking. Using OneNote in this manner, you can take notes and they will be tied to the audio so you can go back and listen to the audio at that moment you made the entry in OneNote. I cover this technique in my Lync Masters report.


I'm no style expert... so don't expect any style tips from me. The expected temp in Orlando for September is around 90 Fahrenheit (32C). To me... being from Colorado that is rather hot. Some people from further down south will likely disagree. My point is you know yourself better than I do. Bring appropriate clothes and be prepared for rain.

Shoes are really, really, really important. Did I mention REALLY important? Even if you have a car, you will do an enormous amount of walking just in the convention center. If you plan to visit any theme parks like Disney/Universal while you are there (Microsoft Attendee party is at Universal) they can be quite large as well. Please bring your best walking shoes... you'll thank me later. If you want to really be prepared, take a look at what some die hard Disney fans prepare for.

Dress code... In all the searches I did, the only places you'll encounter a dress code are Night Clubs and upscale restaurants. Once I know party venues, I'll try to dig that up and post here if I find something.


Not the wired kind of networking... but the people kind of networking. You know... like LinkedIn... but in person. For me, networking with others is by far the most important part of going to a conference. There always seems to be a way to get the "information" shared at a conference before or after, but you can't replace that face to face interaction, especially with people that understand your tech language.

Use the time wisely to meet people and make connections. Many of the connections I made at conferences like this have come in handy when I have questions I can't answer on my own.

If you are looking for me... just ping me on Twitter @ucomsgeek . Feel free to follow me too, because I'll be trying to feverishly be more social than Matt Landis (which is impossible) ;-)

It's always a good idea to bring your Business Cards to hand out and there are usually a number of drawings that you'll probably want to enter (some right on the spot during a session). If I come across any really good ones, I'll post them here.

Sweepstakes / Awards

Cloud Burst Sweepstakes by Turbonomic - Do you want to attend Microsoft Ignite® in Orlando, Florida but your company won’t pay for the conference passes? Enter the Turbonomic® Cloud Burst Sweepstakes to earn your chance to win a full conference pass and unlock access to other monthly cloud prizes – including our grand prize worth $4,950.00! Microsoft Ignite drawing takes place on September 1st!       

$300 DINNER AT FOGO DE CHÃO! by Nigel Frank International -
Microsoft Ignite Orlando 2017 is fast approaching, and to celebrate Nigel Frank are offering attendees the chance to win a $300 voucher for Fogo de Chão. Nigel Frank are thrilled to be Silver Sponsors at Ignite 2017, and we can’t wait to see you there. To make one lucky attendee’s Ignite experience even more incredible, we’re giving away $300 to spend at fine dining, full service Brazilian steakhouse Fogo de Chão.

2017 Microsoft Ignite Pass Giveaway by Adaptiva - Participants enter the Microsoft Ignite 2017 free pass contest by completing the Adaptiva online entry form in addition to liking or following us on one of the following networks: Facebook, Twitter or LinkedIn. By completing the Adaptiva online entry form and following at least one of our social sites, participants will automatically be entered into the contest drawing.

SAPIEN Technologies, Inc., developer of PowerShell Studio and PrimalScript, will award a full conference pass for Microsoft Ignite 2017 to a woman in the Windows PowerShell community, or any individual who is new to IT or devops within the last two years, and works with Windows PowerShell in some capacity.  SAPIEN encourages other Ignite vendors to match this award and support the attendance of technical women and new talent at IT and devop conferences. See details on the link!

GSX Super Hero Giveaway - Got complaints with Office 365 performance? Be a Super Hero, Fight Against Poor End-User Experience Today! GSX is the Office 365 End-User Experience Monitoring Company. Measuring and improving service delivery within complex hybrid and cloud scenarios
will make you a super hero. With SuperPower, Come SuperPrizes! Enter to win prizes totalling $2,000!

Metalogix Microsoft Ignite 2017 Conference Pass Giveaway - We're giving away two free passes to Microsoft Ignite 2017! For a chance to win a Microsoft Ignite Full Conference Pass, simply fill out the entry form by Wednesday, August 23, 2017 to be automatically placed in the raffle. Winners will be selected on Thursday, August 24, 2017.


There are a always a number of parties being thrown during Microsoft Ignite. Some by Microsoft you can find easily in the agenda on the Microsoft Ignite 2017 site. There are other extra-curricular parties that are put on by different vendors and groups. At the time of writing this blog, it is still a bit early for vendor announced parties. When they are announced I will only list the ones I know are public so far. If you are a vendor and would like to be listed on this blog, please reach out to me via @ucomsgeek


None yet.


None yet.


Microsoft Ignite Welcome Reception


Azure Stack Customer Meetup - If you are familiar with hybrid clouds and are interested in shaping the future of Microsoft Azure Stack by interfacing with the Azure Stack engineering team - this meetup is for you! The event will take place on Tuesday 26th September in the evening at a hotel location near the event center. An email invite detailing the exact details will be sent closer to the event. To receive an invite it is a pre-requisite that you have successfully deployed the Azure Stack Development Kit . By Ignite will you have completed a successful deployment? (There will be a test!!)

Veeam's Annual Ignite Party 2017 - by Veeam - Join us Tuesday night at Dewey’s Indoor Golf & Sports Grill for Veeam's Annual Microsoft Ignite Party! Enjoy a night of music, interactive entertainment and drinks on Veeam! A Microsoft Ignite 2017 badge is required for entrance. If you are bringing a guest, please mark that on your registration and EventBrite will send you two separate tickets. Register & bring your Eventbrite ticket to show at the door for entry in a FASTER line!*Occupancy is limited, so admittance will be granted on a first come, first serve basis.

SolarWinds Microsoft Ignite 2017 Meetup - by SolarWinds - Both residents in the Orlando area and Microsoft Ignite attendees are encouraged to register and attend this SolarWinds User Group. See details below! Beer, wine and non-alcoholic refreshments (along with a Buffet it looks like) will be served throughout the evening along with talks and demos!


eNow has done some pretty epic parties in the past and the Microsoft Ignite "//scheduledMaintenance"... is likely to be something you won't want to miss. Tired of your servers receiving all the attention? Need your own Scheduled Maintenance? This might be the place for you... space is limited and like the other parties... spots might go quickly.

MetaFest 2017 by Metalogix - Join us for our annual MetaFest on Wednesday, September 27, at Mango’s Tropical Café! MetaFest will feature an amazing lineup of live bands, dance performances, and an abundance of food and drinks. It’s one party you definitely won’t want to miss! Passes are limited, so register now to reserve your spot! It’s guaranteed to be a great time.


Microsoft Ignite Attendee Celebration - Get ready for one of the biggest parties Microsoft has ever thrown—we’ve reserved both Universal Orlando Resort™ theme parks for Microsoft Ignite attendees only. From 7:30pm to 12:00am on Thursday, 9/28, you’ll have unlimited access to immersive, award-winning rides and attractions.


Most people will be flying in, and I'm sure a great number will be new to Orlando. If you plan to just stick to the Agenda and not do anything extra, you can likely get away with not having a rental car. But if you plan on exploring Orlando, or going to any Vendor parties, you might want to have one available or at least be prepared to do a Taxi/Uber. To use Uber, you'll want to download their app to your device.

Getting from the Airport to the Hotel without a rental car is as simple as getting a Taxi, Super Shuttle, or use Uber.

Super Shuttle will cost about $18 each way (I used the Orange County Convention Center as reference). I've used Super Shuttle in many cities and they are very efficient and professional. You can usually find them close to the rental car counters... but I highly recommend having a reservation ahead of time with so many people traveling to Orlando the same time you are.

The Uber method from the Airport to your Hotel, you should be aware that there are specific instructions you need to follow in order to find your ride successfully. Cost will probably be in the $23-28 range but you won't be sharing with others (I used the Orange County Convention Center as reference).

The Taxi method from the Airport is the most common. There should be signs for Ground Transportation at the airport that takes you to the Taxi area. Cost will be in the $40-65 range depending on traffic (I used the Orange County Convention Center as reference).

Keep checking back... this blog post will be updated as more information comes out!

Wednesday, July 5, 2017

PowerShell Script to Backup AudioCodes Gateways (updated for 7.0 and 7.2)

A few years ago I created a PowerShell script that would backup AudioCodes gateways. It's gone through several iterations as AudioCodes has changed how they do authentication. Now with 7.0 and 7.2 out in the wild, I again found that I needed to update this script again to support the changes to the user interface.

Fortunately I've got great friends and Mitch Steiner had been messing with AudioCodes new API to pull some interesting metrics for our T2M Cloud and he let me know that he stumbled upon a way to pull the .ini configuration using the REST API. The new REST API reduced the amount of code to do a backup down to literally one line. Now obviously it would be cool to have a script that detected which AudioCodes version it was connected to, so it is more than just one line in the script below. I also found a way to "Burn" the configuration on 7.0 and 7.2 using the API. So that is part of the script and executes just before backup.

Couple of key items before you run the script below.
  • If you are running on a Windows 7 or other workstation you'll need to set your PowerShell Execution Policy.
  • Next you will need to install a package called cURL that is a command line tool for interacting with web pages. It is required to work with the Forms Based Auth that audiocodes uses. I used a new tool to install it called Chocolatey, which is the equivalent of RPM packages for Windows. Here is the page for cURL ( and here is the main page for Chocolatey (
  • PowerShell has an alias for curl that you'll need to remove. The command is Remove-Item alias:curl 
Without further adieu... I give you the AudioCodes backup script that will backup any 6.4, 6.6, 6.8, 7.0, or 7.2 AudioCodes Gateway/SBC. 

# Script to Backup AudioCodes Gateways# Created By Jonathan McKinney ( Disclaimer: You running this script means you won't blame Jonathan McKinney or his employer if this breaks your stuff. This script is provided AS IS without warranty of any kind.

# User Modifiable Variables
$username = "Admin"
$password = "Admin"
$address = ""
$backuppath = "c:\scripts\backups\"

# Variable Initialization
$filename = $null
$statuscodeeval = $null

#Function to detect if Forms Auth is present
function DetectAuthType ($ad)
    $loginurl = $null
    $loginurl = "http://" + $ad + "/api"
    $statuscode = curl -o null.txt $loginurl -w '%{http_code}'
    If ($statuscode -eq "404")
        $loginurl = "http://" + $ad + "/"
        $statuscode = curl -o null.txt $loginurl -w '%{http_code}'
        Write-host `r`n "Status Code " $statuscode
        If ($statuscode -eq "401")
            $statuscodeeval = "basic"
        ElseIf ($statuscode -eq "203")
            $statuscodeeval = "forms"
            $statuscodeeval = "neither"
    ElseIf ($statuscode -eq "401")
            $statuscodeeval = "api"
    Return $statuscodeeval
    Remove-Item null.txt

 # Function to Authenticate with Forms Auth
function AuthenticateForms ($un, $pw, $ad)
     $login1sregex = "\<s\>(\d*)\<\/s\>"
     $login1rregex = "\<r\>(.*)\<\/r\>"
     $a1 = $null
     $loginusername = $null
     $loginurl = $null
     $login1webpage = $null
     $login1spattern = $null
     $login1rpattern = $null
     $hashByteArray1 = $null
     $hashByteArray2 = $null
     $passwordhash = $null
     $resultwebpage = $null
     $formsbasedauth = $null
     Write-Host `r`n 'Forms Authentication' `r`n
     $login1username = "c1=" + $un
     $loginurl = "http://" + $ad + "/UE/Login"
     $login1webpage = curl $loginurl --data-urlencode "t=1" `
                                     --data-urlencode "c0=0" `
                                     --data-urlencode $login1username `
                                     --header "X-Requested-With: XMLHttpRequest" `
                                     -c cookiejar.txt `
                                     --header "Cookie: aclogname=; C2=ct" `
                                     --user-agent "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"

      $login1spattern = $login1webpage -split "`n" | Select-String -pattern $login1sregex -Allmatches | % { $_.Matches | % { $_.groups[1].Value } }

      $login1spattern = "s=" + $login1spattern
     $login1rpattern = $login1webpage -split "`n" | Select-String -pattern $login1rregex -Allmatches | % { $_.Matches | % { $_.groups[1].Value } }

      $cryptoServiceProvider = [System.Security.Cryptography.SHA256CryptoServiceProvider]
     $hashAlgorithm = New-Object $cryptoServiceProvider
     $hashByteArray1 = $hashAlgorithm.ComputeHash($([Char[]]$password))
     foreach ($byte in $hashByteArray1)
          $a1 += "{0:x2}" -f $byte
     $a2 = $username + ":" + $login1rpattern + ":" + $a1
     $hashByteArray2 = $hashAlgorithm.ComputeHash($([Char[]]$a2))

      foreach ($byte in $hashByteArray2)
          $passwordhash += "{0:x2}" -f $byte
     $passwordhash = "c1=" + $passwordhash
     $resultwebpage = curl $loginurl --data-urlencode "t=1" `
                                     --data-urlencode $login1spattern `
                                     --data-urlencode "c0=1" `
                                     --data-urlencode $passwordhash `
                                     --header "X-Requested-With: XMLHttpRequest" `
                                     -c cookiejar.txt `
                                     --header "Cookie: aclogname=; C2=ct" `
                                     --user-agent "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"

# Function to Backup Gateway WITHOUT Forms Auth
function BackupBasic ($un, $pw, $ad, $path)
     $regex = "BOARD.*\.ini"
     $webclient = $null
     $configurl = $null
     $backupurl = $null
     $webpage = $null
     $pattern = $null
     $backupfilename = $null

     $webclient = new-object System.Net.WebClient
     $webclient.Credentials = New-Object System.Net.NetworkCredential($un, $pw)

     Write-Host `r`n 'Detecting .ini name' `r`n
     $configurl = "http://" + $ad + "/ConfigurationFile"
     $webpage = $webclient.DownloadString($configurl)
     $pattern = $webpage -split "`n" | Select-String -pattern $regex -Allmatches | % { $_.Matches | % { $_.Value } }
     Write-Host `r`n 'Detected Board Filename ' $pattern

      Write-Host `r`n 'Backing up ' $ad `r`n
     $backupurl = "http://" + $ad + "/FS/" + $pattern
     $backupfilename = $path + $pattern
     Write-Host `r

# Function to Detect the Backup Filename with Forms Auth for the Audiocodes Configuration File
function DetectFilenameForms ($ad)
     $fnregex = "BOARD.*\.ini"
     $configurl = $null
     $fnpat = $null
     $configwebpage = $null

     Write-Host `r`n 'Detecting .ini name' `r`n
     $configurl = "http://" + $ad + "/ConfigurationFile"
     $configwebpage = curl $configurl -b cookiejar.txt
     $fnpat = $configwebpage -split "`n" | Select-String -pattern $fnregex -Allmatches | % { $_.Matches | % { $_.Value } }

     Write-Host `r`n 'Detected Board Filename ' $fnpat
     return $fnpat

# Function to Backup Gateway with Forms Auth
function BackupGatewayForms ($ad, $path, $fn)
     $backupurl = $null
     $backupfilename = $null
     Write-Host `r`n 'Backing up ' $ad `r`n
     $backupurl = "http://" + $ad + "/FS/" + $fn
     $backupfilename = $path + $fn
     curl -o $backupfilename $backupurl -b cookiejar.txt
     Write-Host `r

function BackupGatewayAPI ($un, $pw, $ad, $path)
    $backupurlsc = $null
    $backupurlini = $null
    $backupfilename = $null
    $securepw = $null
    $cred = $null

    $backupurlsc = "http://" + $ad + "/api/v1/actions/saveConfiguration"
    $backupurlini = "http://" + $ad + "/api/v1/files/ini"
    $addressfilename = $ad.Replace(“.”,”-”)
    $backupfilename = $path + "BOARD.ini"
    Write-Host $backupfilename
    $securepw = ConvertTo-SecureString -String $pw -AsPlainText -Force
    $cred = new-object System.Management.Automation.PSCredential ($un, $securepw)
    Invoke-RestMethod $backupurlsc -Method post -Credential $cred
    Invoke-RestMethod $backupurlini -Method get -Credential $cred -OutFile $backupfilename -verbose
    Write-Host  `r

# Function to Logoff Audiocodes with Forms Auth after finishing work
function LogoffForms ($ad)
     $logoffurl = $null
     $logoffwebpage = $null
     $logoffurl = "http://" + $ad + "/PressLogOff"
     $logoffwebpage = curl $logoffurl -b cookiejar.txt
     Remove-Item cookiejar.txt

# Main Script

 $formsbasedauth = DetectAuthType $address

 if ($formsbasedauth -eq "forms")
     AuthenticateForms $username $password $address
     $filename = DetectFilenameForms $address
     BackupGatewayForms $address $backuppath $filename
     LogoffForms $address
ElseIf ($formsbasedauth -eq "basic")
     BackupBasic $username $password $address $backuppath
ElseIf ($formsbasedauth -eq "api")
     BackupGatewayAPI $username $password $address $backuppath
     Write-Host "Something went really wrong... couldn't detect Authentication type... Might I suggest Wireshark"

Friday, June 30, 2017

Polycom VVX 5.5.2 QoE Reports

It's no secret that I've been hard on Polycom VVX phones in the past (especially with the lack of local Normalization rules processing). But I will say with the version 5.5 release they have come a long way on addressing some key issues and making the phone a decent replacement for the old Aries sets (Polycom CX Series).

Today, I'm excited to share that I've verified that Polycom VVX 5.5.2 now produces QoE reports just like the SfB/Lync PC Client. This means if you have Lync, Skype for Business on-premises or Skype for Business CloudPBX, they all will start showing reports for VVX phones.

If you look at the release notes, QoE Reporting actually was in 5.5.1 but at least for my customer there was a problem with that release that prevented deployment. My guess is there are a lot of people out there that haven't updated to 5.5 because what they have just works.

I am super excited about QoE reporting for VVX because it was a huge hole that was missing in the story. It's really hard to explain to customers that they have these great phones, but there is no way to see how they are performing on a call-by-call basis with what SfB provides out of the box (Polycom has some solutions of course). 

This also means that other tools like EventZero, IR Prognosis, Nectar, etc can now have more complete reporting on these devices.

Here are a couple of screen shots of how the information looks in Monitoring Server for VVX phones. The VVX was the Calee side of the call in these examples.

One of the things I noticed right off the bat is that the Codec report is G711Mu instead of the typical PCMU for G.711 Mulaw. It's minor... but it is a diff. 

On the device metrics, it seems on par with other devices providing good information on how the audio performance of the device is doing.

Anyway... I hope you are already downloading the firmware so you can go see for yourself what you've been missing... Later