Category Archives: Azure

Register resource providers in Azure

These lines of PowerShell will help you register ALL resource providers in Azure in the selected subscription:

# Login

# List subscriptions

# Select subscription
Select-AzureSubscription -SubscriptionName “INSERT NAME HERE”

# List all providers and register (if you only want specific ones, you must run commands manually)
$providers = @(Get-AzureRmResourceProvider -ListAvailable)
foreach ($x in $providers) {

Register-AzureRmResourceProvider -ProviderNamespace $x.ProviderNamespace -Force
write-host $x.ProviderNamespace
Write-Host “Done!”

Creating a VPN gateway in Azure ARM using PowerShell

Spent a few days at a customer site building stuff. Needed some gateways in ARM (Azure Resource Manager) mode. The code below will create a gateway and all artifacts it depends upon.
Use at your own risk 🙂
# Start here
# Variables
$location01 = “West Europe”
$networkname01 = “AzNet”
$rgname01 = “AzNetRG”
# Azure Network Address Space (/27 for VM use. /29 for gateway use)
# Your Azure network MUST have a subnet named “GatewaySubnet”
# Create your network in the portal, make sure to add all address spaces and subnets before running script. Do NOT forget to add “GatewaySubnet”.
$localSubnets01 = @(“”, “”)
# Remote Network Address Space
$remotenetwork01 = @(“”)
# Remote Network Gateway IP
$RemoteGwIP01 = “”
# Remote Connection Gateway Name
$RemoteConnectionGwName = “RemGW”
# Remote Connection Name
$RemoteConnectionName = “RemConn”
$VNET01 = Get-AzureRMVirtualNetwork -Name $networkname01 -ResourceGroupName $rgname01
$gwSubnet01 = Get-AzureRMVirtualNetworkSubnetConfig -Name GatewaySubnet -VirtualNetwork $VNET01
# Create a new public IP address.
$gwIP01 = New-AzurermPublicIpAddress -Name ($networkname01 + “-gwip”) -ResourceGroupName $rgname01 -Location $location01 -AllocationMethod Dynamic
# Create VPN gateway configuration.
$gwConfig01 = New-AzurermVirtualNetworkGatewayIpConfig -Name ($RemoteConnectionName + “-gwconfig”) -SubnetId (Get-AzurermVirtualNetworkSubnetConfig -VirtualNetwork $VNET01 -Name GatewaySubnet).Id -PublicIpAddressId $gwIP01.Id
# Create gateway. This will take up to 40 minutes, so be patient.
$gw01 = New-AzurermVirtualNetworkGateway -Name ($networkname01 + “-gw”) -ResourceGroupName $rgname01 -Location $location01 -IpConfigurations $gwConfig01 -GatewayType VPN -VpnType RouteBased -Tag $tags
$localGw01 = New-AzurermLocalNetworkGateway -Name $RemoteConnectionGwName -ResourceGroupName $rgname01 -Location $location01 -GatewayIpAddress $RemoteGwIP01 -AddressPrefix $remotenetwork01
$AzureGW = Get-AzureRmVirtualNetworkGateway -Name ($networkname01 + “-gw”)  -ResourceGroupName $rgname01
$RemoteGW = Get-AzurermLocalNetworkGateway -Name $RemoteConnectionGwName -ResourceGroupName $rgname01
New-AzurermVirtualNetworkGatewayConnection -Name $RemoteConnectionName -ResourceGroupName $rgname01 -Location $location01 -VirtualNetworkGateway1 $AzureGW -LocalNetworkGateway2 $RemoteGW -ConnectionType IPsec -RoutingWeight 10 -SharedKey $sharedKey01
# End here

TechDays 2015 – Pre-conf and Azure Resource Manager

Just got an email confirming mine and Anders Bengtssons pre-conf for TechDays 2015, the “Azure IAAS Ninja Bootcamp”. We’ll teach you as much as you can consume about Azure IAAS during one day! I also got one session on Azure Resource Manager. ARM is by far the biggest leap in producing clean, nicely installed and repetitive environments in Azure. If you’re missing out on PowerShell and ARM along with DSC my guess is that you’ll be doing something else in the future!

Are you going to TechDays 2015 in Sweden?

Check out my sessions here:

And don’t forget to register:

Connecting to your Azure site-to-site VPN over NAT

Creating a site-to-site connection to your Azure virtual network is desired in a lot of scenarios. Think hybrid cloud, new workloads, communicating with internal systems from Azure and so on. And in demo scenarios when you’re out travelling you might need that access too. Well, looking at the list of supported devices (below) we can find Windows RRAS for example.

Supported VPN devices:

And reading the guide (below) we’ll see how it’s actually done.

Configure Site-to-site VPN:

According to the last link you’ll need an external IPv4 that’s not behind NAT: “Obtain an externally facing IPv4 IP for your VPN device. This IP address is required for a site-to-site configuration and is used for your VPN device, which cannot be located behind a NAT.

That last statement has been discussed quite a lot, and when you read the RFC (RFC 3715,  of course that IPsec connection will work over NAT. It’s just not supported by Microsoft, meaning that we can’t help you configuring your firewall to allow passthrough, hence we want your gateway to be directly connected to the internet.

For IPsec to traverse your NAT you’ll need to forward some ports (often called port forwarding in your router).

IKE – UDP 500
Encapsulating Security Payload (ESP) – IP protocol 50
Authentication Header (AH) – IP protocol 51
IPsec NAT traversal – UDP 4500

My setup consists of a Telia router with an external IP of 78.72.172.xx, my internal ip range is This is added as a local network in Azure.


I then create a new virtual network in Azure and create a dynamic gateway. This will be assigned an ip address.


After that I’ve installed a VM on my local network running Windows Server 2012 R2 and configured it with RRAS. If you download the VPN device configuration script from the Azure portal it’ll set everything up for you, including installing the role. I’ve also configured the port forwarding in my router.



As you can see in the screenshot above the rule “IPSEC_500” forwards all traffic to

Once you have your port forwarding up and running you can have your RRAS server connect.


Give the portal some time (or refresh it) and it’ll show connected too


I’ve deployed two VM’s in Azure and turned off the firewall to be able to verify connectivity using ping.




In the screenshot above I’ve verified connectivity to in Azure with ping, and I’ve done a traceroute. The timeout is from the Azure gateway that doesn’t respond to ICMP. Internal address of RRAS server can be seen in the lower window.

Note that this is unsupported by Microsoft – but works according to RFC.

Uploading your RemoteApp image directory from Azure to RemoteApp

If you’ve been working with RemoteApp for a while you’ve most likely gotten tired of downloading and uploading that image by now. Most of us have probably set up a VM in Azure and added a disk to it, just bouncing the VHD off of that one. Saves a lot of time just staying in Azure. But still, downloading it IS time consuming so to get around that I’ve written a script. Before you download it there are some pointers:

There is NO error checking. Meaning you must remember to disable EFS, install all the roles/features and run sysprep manually. If you forget something you’ll notice that when you try to start your image. That’s VERY late in the process.

The script needs you to have the Azure Storage SDK installed. Same here, if the path to the DLL has changed it’ll fail. If my calendar decides to clear out I’ll give it some time and clean it up but for now it’s a quick and dirty fix… Copy below, save as .ps1 and off you go!

# Load Assembly – Without this file, it’ll all fail…
Add-Type -Path “C:Program Files (x86)Microsoft SDKsAzurePowerShellServiceManagementAzureNetworkMicrosoft.WindowsAzure.Storage.dll”

# Source information
# Information from storage account
$sourceStorageAccount = “storageaccountname” # <- Storage account name
$sourceStorageKey     = “yourstoragekey” # <- The key to your storage account
$sourceContainer      = “vhd” # <- Container name
$sourceFilename       = “RemoteAppTemplate.vhd” <- VHD name, can be seen in your container
$sourceContainerUri   = [String]::Format(“https://{0}{1}”, $sourceStorageAccount, $sourceContainer)

# Destination information
# Information from RemoteApp upload script commandline
$destStorageAccount = “cdvne195334804rdcm”    # <- Destination name
$destStorageSAS     = “?sv=2012-02-12&sr=b&si=f6939bb2-a99d-43b6-823a-fe8ad44f5c20&sig=6q%2Bk8t7xzzC7DeICrWvb39rh4lUEijg93UFL7631V6s%3D” # <- SAS key
$destContainer      = “goldimages” # <- Container name
$destFilename       = “f6939bb2-a88d-43b6-811a-fe8ad41f5c20.vhd” # <- VHD name, can be seen in the command line from RemoteApp
$destUri            = [String]::Format(“https://{0}{1}/{2}”, $destStorageAccount, $destContainer, $destFilename)

# This is where the magic happens

Write-host “Uploading your image…”
$sourceCredentials = New-Object Microsoft.WindowsAzure.Storage.Auth.StorageCredentials($sourceStorageAccount, $sourceStorageKey)
$sourceContainer = New-Object Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer($sourceContainerUri, $sourceCredentials)
$sourceBlob = $sourceContainer.GetBlobReferenceFromServer($sourceFilename)
$sourceStream = $sourceBlob.OpenRead()

$destCredentials = New-Object Microsoft.WindowsAzure.Storage.Auth.StorageCredentials($destStorageSAS)
$destBlob = New-Object Microsoft.WindowsAzure.Storage.Blob.CloudPageBlob($destUri, $destCredentials)

$destBlob.Metadata[“Status”] = “UploadComplete”


A good idea is to run this script from a VM in Azure too. That’ll speed up the process. Azcopy would be able to do the same thing if it supported SAS-usage across subscriptions.

Nya tider, ny teknik, nytt datacenter

När Microsoft tidigare har gjort affärer med företag och även privatpersoner har vi sålt licenser. Du köper X antal licenser av oss som ger dig rätt att använda Windows, Office och kanske några andra produkter. Det har historiskt sett varit en väl fungerande affärsmodell och alla parter har varit nöjda med det upplägget. Windows som klientoperativsystem, stationär PC som arbetsstation och fysiska arbetsplatser är däremot tre områden där det hänt väldigt mycket. Många företag som tidigare kanske hade en bärbar dator / Windows-tablet för sin personal klarar sig idag med en telefon. Se t.ex. Mathem där man som kund signerar sin leverans direkt på chaufförens mobilskärm. Den stationära PC’n är något som också fått stå tillbaka, de bärbara datorerna har kraftigt sjunkit i pris, särskilt om användningsområdet är Office, epost och surf. En portabel arbetsstation för t.ex. grafiskt arbete kostar fortfarande mycket pengar. Numera använder personal allt ifrån mobiltelefoner, plattor och vanliga datorer.


Tittar vi på datacentret så går utvecklingen rasande fort där också. Virtualisering var det som först ändrade hur vi ser på datacentret. Det har gått från att virtualisera själva servern till att vi nu pratar ”software defined X”. Där X numera är compute, lagring och nätverk. Alla delar i vårt datacenter kan numera virtualiseras. Ser vi till vad Microsoft vill åstadkomma med Azure så är det kanske inte i första hand virtualisering vi tänker på, även om IAAS-delarna erbjuder detta. Vi vill att företag till ett konkurrenskraftigt pris ska kunna bygga ut sitt datacenter när man är i behov av testmiljöer, utveckling, belastningstoppar och självklart även ”vanliga” servrar. Lanseringen av nya funktioner sker regelbundet, t.ex. ”network security groups” för att filtrera trafik mellan subnät och multi-nic-maskiner för att kunna ha flera nätverkskort i virtuella servrar. Övrig arkitektur bygger väldigt mycket på att tänka nytt, särskilt om man ska flytta ut eller migrera servrar t.ex. nu när Windows Server 2003 skall ut. Man bör se över hur man gör med applikationer och vara medveten om Azure Web Sites, Azure SQL mfl funktioner som möjliggör modern drift.


Det som är viktigt att komma ihåg både som företagsledare, it-chef och driftschef är att verksamheten ofta är känslig för byråkrati, pris och leveranstider. Begreppet ”skugg-it” torde vara välkänt vid det här laget. Det är det som uppstår när verksamheten skaffar sig tillgång till SAAS-applikationer utan att passera IT-avdelningen. Några som är vanligt förekommande är Salesforce och Projectplace. Inte nog med att IT-avdelningen inte har koll på den leveransen, identiteterna som används kan vara användarnas egna gmail/ Problemet med det är inte uppenbart förräns någon beter sig illa eller slutar. Då har man inte längre kontroll på vem som kan logga in och var. Azure Active Directory är ett exempel på hur vi dagligen hjälper företag att hålla koll på vilka användare som har tillgång till vilka applikationer. Funktioner som att återställa sitt lösenord om man glömt det eller att ha multifaktorsauthenticiering för att säkra känsliga applikationer kan vi också lösa.


Vi på Microsoft hjälper dig gärna. Från ett första möte där vi diskuterar allt från hur Microsoft förändras i dessa tider, till legala krav i din verksamhet och tekniska aspekter. Vill du gå vidare hjälper vi dig självklart med workshops och designsessioner i hur din verksamhet skulle kunna fungera med modern IT som stöd.

Vill du lära dig mer om Microsoft Azure rekommenderar jag varmt MVA – Microsoft Virtual Academy. Kolla in följande kurser:

Introduktion till IAAW och Microsoft Azure – Med Ola Skoog
Moving to Hybrid Cloud with Microsoft Azure
Microsoft Azure IaaS Deep Dive Jump Start
The Microsoft Hybrid Cloud: Best practices guidelines
Microsoft Azure: Site-to-site VPN

SWE: Lär dig Azure #4 – En virtuell server. Med Minecraft!

Lär dig Azure #4 – En virtuell server. Med Minecraft!


I del nummer fyra ska vi kolla närmare på hur man skapar en virtuell maskin. För att göra dig till hjälte i hemmet ska vi också installera Minecraft i servern så att barnen kan få en egen Minecraft-server.


En virtuell server tillhör det vi kallar IAAS, Infrastructure As A Service. Företag kan installera sina egna programvaror på servrarna, och när dom inte används har företaget ingen kostnad för dom. Den här guiden hjälper dig att installera en virtuell server så att du får en känsla för hur lätt det är.




Vi börjar med att logga in i portalen på och i den vänstra kolumnen klickar vi på ”Virtual machines”, nummer tre uppifrån. Ser ut som en tv J


Om det här är din första virtuella server är det tomt i den högra rutan. Har du redan några så ser du en lista.


Välj ”New” längst ner till vänster vid plustecknet, när menyn kommer upp väljer du ”From Gallery”. Om du inte ser det alternativet klickar du på ”Compute”, sedan ”Virtual Machines” och SEN på ”From Gallery”.


I galleriet har vi förberett massa olika installationer. Dels har vi såklart Windows och SQL Server. Sedan har vi SharePoint och Visual Studio. Oracle har valt Azure som den enda supporterade molntjänsten och vi har en uppsjö olika Linux-distributioner att välja på.


För vår uppgift idag väljer vi ”Windows Server 2012 R2 Datacenter”, överst i listan. Markera den genom att klicka på den och klicka på pilen längst ner till höger.


I formuläret på nästa sida har vi fler alternativ:


Version release date: När installerades senast säkerhetsuppdateringarna i imagen. Välj senaste datumet.

Virtual machine name: Namnet som servern kommer få i Windows (alla datorer heter något).

Tier: Basic har inte en lastbalanserare, Standard har. Väldigt enkelt förklarat. Vi väljer Basic.

Size: Storlek på den virtuella maskinen, ju större desto dyrare. A0 eller A1 räcker utmärkt. Det går även att byta storlek senare.

New user name: Administratörskontot på servern. Kan inte vara ”administrator” som är vanligast. Kom ihåg vad du skriver i den här rutan.

New password: Lösenordet. Måste uppfylla komplexitetsregler. Glöm INTE det här!

Klicka högerpil.


Nytt formulär.


Cloud service: Lägg med servern i en ny eller befintlig cloud service. En cloud service används för t.ex. lastbalansering.

Cloud Service dns name: Det externa dns-namn din tjänst får.

Region/affinity group/virtual network: Var vi ska placera vår server. Välj West eller North Europé.

Storage Account: I vilket storage-konto servern ska lagras. ”Use an automatically…” duger fint.

Availability set: När två maskiner levererar samma tjänst (t.ex. en websida) lägger man dom i ett availability set för att säkerställa att tjänsten alltid är igång.

Endpoints: En endpoint är den port/ar som servern lyssnar på. En webserver lyssnar till exempel på port 80 som protokollet http går över. Minecraft lyssnar på port 25565. I rutan där det står ”Enter or select a value” skriver du Minecraft, välj TCP som protokoll och både public och private port ska alltså vara 25565.

Högerpil, här går det undan!


Låt rutan ”Install the VM agent” vara ikryssad. Klicka på bocken nere till höger.


I listan kan du nu ser hur Azure installerar din server. Det tar 5-10 minuter, garanterat längre om du sitter och stirrar på skärmen. Dags att hämta en kaffe, eller gå ut med hunden. Eller dra på Lenny Kravitz nya platta ”Strut” och fuldansa i köket.


När det bakom ditt servernamn står ”Running” så är server uppe och snurrar. Dags för minecraft!


Om man tycker att formuläret är lite tidsödande och krångligt så tycker man rätt. Vanligtvis gör man hela den här operationen med PowerShell istället.


Klicka på servernamnet, och sedan på ”Connect” nederst på skärmen. När frågan ”Do you want to open or save…” dyker upp klickar du på “Open”. Nästa ruta är ”Remote Desktop Connection”, klicka på ”Connect” nere till höger. Välj ”Use another account”. I rutan ”User name” skriver du ”servernamnetanvändarnamn”, t.ex. ”minecraft01joachim” och i rutan ”Password” skriver du in lösenordet du valde.


I nästa ruta väljer du ”Yes


Efter ett tag loggas du in på din server och ser skrivbordet.


Nu är det dags för vår Line Of Business-applikation!




Det finns en ypperlig instruktion på hur man installerar Minecraft för Windows. Kör du fast här så kika in där.


Eftersom det är en server vi installerat måste vi först se till att kunna surfa på internet. I programmet som är öppet i din server, ”Server Manager”, klickar du på ”Local Server” i kolumnen till vänster. Leta sedan reda på där det står ”IE Enhanced Security Configuration” och klicka på ”On”, välj ”Off” på bägge ställena och klicka ”Ok”.


Starta Internet Explorer från startmenyn och surfa till Under rubriken ”Multiplayer Server” hittar du ”minecraft_server.1.8.exe”. Ladda hem den, och kör. Klart! Nu kan du från barnets (eller din) dator ansluta med Minecraft mot det namn din Cloud Service fick. Kolla i portalen vad det står under rubriken ”DNS Name”, ange det i minecraft under servernamn när du ska ansluta.


Om ditt barn vill ha massa plugins till Minecraft rekommenderar jag dock att du väljer Java-versionen istället. Kolla in guiden jag länkade till ovan för hur du bär dig åt då!


Hur man skapar en virtuell maskin i Azure:



Lycka till och återkom om det är några frågor!