Recently I was working on an Azure ExpressRoute configuration change that required an uplift from a 1GB circuit to a 10Gb circuit. Now thats nothing interesting, but, of note was using some PowerShell to execute a cmdlet.
A bit of a back story to set the scene here; and I promise it will be brief.
You can no longer provision Azure ExpressRoute circuits in the Classic or ASM deployment model. All ExpressRoute circuits that are provisioned now are indeed Azure Resource Manager (ASM) deployments. So there is a very grey area between what cmdlets to run on which PowerShell module.
The environment I was working with had a mixture of ASM and ARM deployments. The ExpressRoute circuit was re-created in ARM. When attempting to follow the Microsoft documentation to connect a VNET to that new circuit (available on this docs.microsoft.com page), I ran the following command…
Get-AzureDedicatedCircuitLink New-AzureDedicatedCircuitLink -ServiceKey "[XXXX-XXXX-XXXX-XXXX-XXXX]" -VNetName "<MyVNet>"
…but PowerShell threw out the following error (even after doing the end to end process in a new PS ISE session):
Get-AzureDedicatedCircuit : Object reference not set to an instance of an object. At line:1 char:1 + Get-AzureDedicatedCircuit + ~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Get-AzureDedicatedCircuit], NullReferenceException + FullyQualifiedErrorId : System.NullReferenceException,Microsoft.WindowsAzure.Commands.ExpressRoute.GetAzureDedicatedCircuitCommand
This is actually quite a tricky one as there's little to no documentation that outlines this specifically. It's not too difficult though as theres only two things you need to do:
Note: If you have a newer version of the Azure PowerShell modules, like I did (version 5.2.0), import the older module as per bellow
Import-Module "C:\Program Files\WindowsPowerShell\Modules\Azure\5.1.1\Azure.psd1" Import-Module "C:\Program Files\WindowsPowerShell\Modules\Azure\5.1.1\ExpressRoute\ExpressRoute.psd1
Then you can execute the
New-AzureDedicatedCircuitLink command and connect your ASM VNET to ARM ExpressRoute.
Follow or start a discussion for this blog (PowerShell gotcha when connecting ASM Classic VNets to ARM ExpressRoute) on Twitter. If you're after something more in depth, or want to ask me an expanded question: raise an issue in my open GitHub AMA repo.