2

Install Microsoft Graph Module for Azure Automation using PowerShell

If you’re familiar with Azure Automation and Graph API, you may have noticed that it may be a bit cumbersome to install the Microsoft.Graph PowerShell module in an Automation account. Since the Graph API module has over 30 sub modules it’s a bit of a pain to install the full set manually using the GUI. Today we’re going to cover how to install the Microsoft Graph Module for Azure Automation using PowerShell.

Requirements

Before I get to the script, there are a few things that need to be in place before we’re able to successfully install the module. Let’s cover that now:

  • Az PowerShell Module
  • Permissions to install any module

Install Microsoft Graph Module for Azure Automation using PowerShell

Here is the script I wrote to be able to install and update the Microsoft.Graph module for an Automation account. You can always manually check for the latest version on the PowerShell gallery.

#Before running the script, be sure you're on the right subscription
Set-AzContext -SubscriptionId $SubscriptionId
$ResourceGroup = 'rg-resourcegroupname'
$AutomationAccount = 'automationaccountname'
[System.Collections.Generic.List[Object]]$InstalledModules = @()

#Get top level graph module
$GraphModule = Find-Module Microsoft.Graph
$DependencyList = $GraphModule | select -ExpandProperty Dependencies | ConvertTo-Json | ConvertFrom-Json
$ModuleVersion = $GraphModule.Version

#Since we know the authentication module is a dependency, let us get that one first
$ModuleName = 'Microsoft.Graph.Authentication'
$ContentLink = "https://www.powershellgallery.com/api/v2/package/$ModuleName/$ModuleVersion"
New-AzAutomationModule -ResourceGroupName $ResourceGroup -AutomationAccountName $AutomationAccount -Name $ModuleName -ContentLinkUri $ContentLink -ErrorAction Stop | Out-Null
do {
    Start-Sleep 20
    $Status = Get-AzAutomationModule -ResourceGroupName $ResourceGroup -AutomationAccountName $AutomationAccount -Name $ModuleName | select -ExpandProperty ProvisioningState
} until ($Status -in ('Failed','Succeeded'))

if ($Status -eq 'Succeeded') {
    $InstalledModules.Add($ModuleName)

    foreach ($Dependency in $DependencyList) {
        $ModuleName = $Dependency.Name
        if ($ModuleName -notin $InstalledModules) {
            $ContentLink = "https://www.powershellgallery.com/api/v2/package/$ModuleName/$ModuleVersion"
            New-AzAutomationModule -ResourceGroupName $ResourceGroup -AutomationAccountName $AutomationAccount -ContentLinkUri $ContentLink -Name $ModuleName -ErrorAction Stop | Out-Null
            sleep 3
        }
    }

    $LoopIndex = 0
    do {
        foreach ($Dependency in $DependencyList) {
            $ModuleName = $Dependency.Name
            if ($ModuleName -notin $InstalledModules) {
                $Status = Get-AzAutomationModule -ResourceGroupName $ResourceGroup -AutomationAccountName $AutomationAccount -Name $ModuleName -ErrorAction SilentlyContinue | select -ExpandProperty ProvisioningState
                sleep 3
                if ($Status -in ('Failed','Succeeded')) {
                    if ($Status -eq 'Succeeded') {
                        $InstalledModules.Add($ModuleName)
                    }

                    [PSCustomObject]@{
                        Status           = $Status
                        ModuleName       = $ModuleName
                        ModulesInstalled = $InstalledModules.Count
                    }
                }
            }
        }
        $LoopIndex++
    } until (($InstalledModules.Count -ge $GraphModule.Dependencies.count) -or ($LoopIndex -ge 10))
}



Install Authentication Module

Microsoft Graph Module for Azure Automation

Microsoft Graph Module for Azure Automation

Conclusion

And just like that, we were able to install the Microsoft Graph Module for Azure Automation. One thing to note, This method only supports PowerShell version 5.1 at the moment so if you want to install the module for PowerShell 7 and later, you will still need to do that the manual way.
 

Since you’re now using Graph API with Azure Automation, here is a great article to use Managed Identities in your Automation Runbooks so you no longer have to worry about secrets or certificates in your code.

5/5 - (3 votes)

Paul Contreras

Hi, my name is Paul and I am a Sysadmin who enjoys working on various technologies from Microsoft, VMWare, Cisco and many others. Join me as I document my trials and tribulations of the daily grind of System Administration.

2 Comments

  1. To install the modules for Powershell 7 I tried using -RuntimeVersion parameter in Get-AzAutomationModule and New-AzAutomationModule

  2. Thanks very much. The script worked forst time with no issues. Saved me a lot of mucking about trying to install.

Leave a Reply

Your email address will not be published. Required fields are marked *