Setting up a Domain Controller on Microsoft Azure Virtual Machine

Installing a Domain Controller on Microsoft Azure Virtual Machine turned out to be quite a challenge and it was not even the primary task I was trying to achieve this weekend. I was trying to setup a Microsoft CRM VM on Azure and it all lead to 24 Hours of learning on Azure Services and Azure Powershell. I am used to setting up a separate Active Directory Server when installing CRM or SharePoint locally (Standard or Enterprise SharePoint installations don’t allow installing AD on the same machine anymore) – what I understood from the effort is that if you are new to Azure, the order of the following steps are really important.

  1. Setup a Virtual Network (VNet) under your Microsoft Azure Subscription.
  2. Select New > Network Services > Custom Create.
    • Give your Virtual network a name and click Next.
    • Leave the DNS Servers Empty for now – we will come back to it after our AD Forest and DNS Server are all setup.
    • Click Next and leave Virtual Network Address Spaces to Default subnet
  3. Create the first domain controller Virtual Machine  – New > Compute > Virtual Machine > From Gallery.
    • Select “Windows Server 2012 R2 Datacenter”, give your Virtual Machine a Name and specify a username / password
    • In Virtual Machine Configuration, Select a new Cloud Service (if you are setting up a second domain domain controller, you will have to select the same Cloud Service)
    • Select your virtual network that you setup in Step 1 in the Region / Affinity Group / Virtual Network.
    • Select the default storage account (or the same storage account as the first DC machine if you are adding more than one DCs)
    • Create an Availability Set for your first DC VM (You will have to add all subsequent DC VMs in the same Availability Groups)
    • Click Next and check “Install the VM Agent” and Clock Complete.
  4. You can also setup more than one Domain Controllers by following additional information mentioned in Step 3.
  5. Setup Static Internal IP Addresses for each of your DC VMs. (You can use Azure Powershell Console on your local machine to setup the Static Internal IPs – you may have to install the Azure SDK on your local machine to get the Azure Powershell. The SDK also installs some great Visual Studio Tools for you if you have Visual Studio 2013 Update 3 or above)
  6. PS C:\> Get-AzureVM -ServiceName AleemVNet2DC -Name AleemVNet2DC | Set-AzureStaticVNetIP -IPAddress | Update-AzureVM


  7. Attach a new Empty Hard Disk to each of your DC VMs. This disk will be used for saving the Active Directory Files, Logs etc.
    • Go to the Azure Virtual Machines dashboard on Azure Portal and clock “Attach” in the bottom Ribbon options – Select “Attach an Empty” disk and create a new empty disk – specify name and size of the disk (say 10 GB).
    • Repeat this step for each of your DC VMs
  8. Login to the DC VM and Setup the new attached disk
    • Go to Server Manager > Storage > Disks and select the new attached disk.
    • Right Click and Create a New Volume on the disk.
    • Select all default options and complete the wizard.
    • A new NTFS Volume will be created on the new disk.
  9. Go to your Virtual Network (VNet) created in Step 1
    • Select the Virtual Network and Select Configure
    • Under DNS Servers enter the server name and Static IP Address of your DC Server
    • If you are planning to setup multiple DCs, then enter all the server names and static IPs that you have setup in Step 5.
  10. Login to your Domain Controller VM and install the Active Directory using the Roles and Features Wizard.
    • Go to Server Manager > Manage > Add Roles and Features > Active Directory Services.
    • Complete the Wizard and the Installation
    • After your installation is complete, the server will ask you to configure your feature and if you want to promote this active directory server as domain controller.
    • Complete the Configuration on the Primary Server.
    • The system will ask for a server restart.
    • In case if you are installing multiple DCs, you will have to join all other DC machines to the primary domain first by logging in to the VM – then repeat the same steps of installing and configuring the Active Directory and promoting the server as a Domain Controller
      • You will have to specify the same domain name for secondary controllers and also select the replication from primary server option during the domain controller configuration. Apart from that the configuration is the same as primary server.
  11. Restart the machines and your domain Controller should be up and running with multiple redundant DCs (in case of multiple DCs).

The following article on Azure website was extremely helpful but since I am new to Azure and still figuring out the Powershell commands and the order order of all the steps mentioned above. In the end it all worked out and I have an AD Forest on an Azure Virtual Network with two replicated Domain Controllers under a single Azure Cloud Service and an Availability Set.


FIX: MVC 4 – jqGrid Theme Issue

Just wasted 30 minutes trying to load the jqGrid theme – and it just won’t load. Tried setting up the new bundle configuration – even tried loading the scripts and css files directly in the <head> of _Layout.cshtml but the theme would still not load.


The MVC 4 Project Template inserts the following at the end of footer –

@RenderSection(“scripts”, required: false)

The jquery files should be loaded in the <head> section – Moving @Scripts.Render(“~/bundles/jquery”) should solve the issue – Even if you load the jquery files in the <head> section explicitly – the @Scripts.Render(“~/bundles/jquery”) at the bottom would cause problem and would not let the theme load.

Dynamics CRM 2013 – Sales Entities & Sales Process

Dynamics CRM includes the following Sales Entities and few of these specially Leads, Accounts, Contacts, Opportunities, Quotes, Orders and Invoices are very important for the Sales Process (shown in the diagram below)

  • Lead
    • Leads when Qualified can be converted into Contacts, Accounts and/or Opportunities
  • Accounts
  • Contacts
  • Opportunities
  • Competitors
  • Products
  • Quotes
  • Orders
  • Invoices
  • Goals
  • Goals Metrics
  • Rollup Queries
  • Marketing Lists
  • Sales Literature
  • Quick Campaigns

The following Sales Process is available out of the Box in the Dynamics CRM (diagram courtesy Microsoft VA). The Sales Process Starts with a Lead – which has to be Qualified to Create an Opportunity which can then result in a Quote, an Order and Finally an Invoice.

The Lead Qualification Process depends on the Organization – and there are different methodologies to qualify a lead – the most popular being the BANT (Budget, Authority, Need, Timeline). A Salesperson determines if the Lead has the Authority, and Real Need for the Product or Service and if they have the budget and can make t he purchase in an appropriate time – Once the lead is qualified it can be converted into a potential opportunity.


Dynamics CRM 2013 – Installing Sample Data

Loved the way Dynamics 2013 allows you to install Sample Data from within the product without restoring any sample databases (I miss AdventureWorks Db !) – I used a CRM Online Account last year for a few days and it had the sample data which made it really easy for me to browse and understand different areas of the system – but when I installed the On-Premise CRM 2013 on a VM – it had no data and I had to create the Accounts, Contacts, Leads etc.

The quick way to setup the Sample Data on a clean installation is to go to CRM >> Settings >> Data Management and Click on Sample Data.



The popup will let you install the Sample Data on the CRM.


The other nice feature is the background installation so you don’t have to wait for the data to be setup – you can close the dialog and continue to work on the product while the data is setup quietly – and Viola now I have the data.



The Sample Data can also be removed using the same steps – and works perfectly.

Reference Books these days

Some amazing books which I am keeping with me these days for reference and going through portions whenever I get the opportunity.

Amazon List:


C# in Depth, Second Edition by Jon Skeet

CLR via C#, Second Edition (Pro Developer) by Jeffrey Richter (Author)

Framework Design Guidelines: Conventions, Idioms, and
Patterns for Reusable .NET Libraries (2nd Edition)
by Krzysztof Cwalina, Brad Abrams

Microsoft® .NET: Architecting Applications for the
Enterprise (Pro-Developer)​
by Dino Esposito, Andrea Saltarello

Microsoft® Application Architecture Guide, 2nd Edition
(Patterns & Pra​ctices)
by Microsoft Patterns & Practices Team (Author)

NHibernate 3.0 Cookbook by Jason Dentler

Patterns of Enterprise Application Architecture by Martin Fowler

Professional ASP.NET Design Patterns by Scott Millett

Programming Entity Framework: DbContext by Julia Lerman, Rowan Miller