Build Microsoft Graph Scripts With Azure AD App – Detailed Guide

Microsoft Graph

Setting up an Azure AD application within your tenant will help you in putting scripts together using Microsoft Graph that does not need any user intervention. You can apply granular permissions to the app so that the script is not able to query any other workloads or entities. This is especially important when you work in large organizations as there are dedicated teams for each of the M365 services and they are not going to give you access to query their services without a valid reason.

Please check the first two articles about how to install & work with MS Graph SDK & work with Graph Explorer if you haven’t already.

How To Setup The Azure AD App?

In order to setup the application that will be used to query Microsoft Graph (for scripts, automation tasks etc), navigate to Azure Active Directory portal -> App Registrations. We will be using the OAuth 2.0 Client Credential Flow, as there will be no user interaction.

microsoft graph azure ad

Click on ‘New Registration’.

New registration button

Give a name for the application. Make it descriptive, so that it is easy for any of your colleagues to figure out what it does and why it was created. I will name mine as ‘Graph Script App’. Leave the supported account type as ‘Accounts in this organizational directory only’.

Graph Script App

In the ‘Redirect URI’, select ‘web’ as the platform and ‘https://localhost’ as the url & click the ‘Register’ button.

Redirect URI

The application gets created in a few seconds.

Configuring The Graph Script App

There are two more steps we need to complete to use this application within our scripts. First piece of information that we need is the Application ID & Tenant ID. This is listed in the ‘overview’ tab of the app. Copy & paste it into your script editor.

App tenant ID

We now need to create a client secret for the application. Think of it as a password where the username is the application ID. Navigate to the ‘Certificates & Secrets’ tab and click on ‘New Client Secret’.

New client secret

Enter a description for the secret and an expiry period & click the ‘Add’ button.

Add secret

Before you move away from the tab, copy the ‘value’ field into your script editor. If you did move away, you can delete the secret that you had created and setup a new one.

Copy secret value

Next we need to navigate to the ‘API Permissions’ tab & configure the permissions depending on what resources we are querying in our script. Let us assume that we need to query all the users within the tenant. In order to give the app the permissions to query all users, click on ‘Add a permission’ button -> select Microsoft Graph -> Application Permissions’ and search for

Add a MS Graph permission

Select ‘User.Read.All’ permission and click on the ‘Add permissions’ button.


If you want to write information to the user accounts, you need to select ‘User.ReadWrite.All’ permissions. If you need to play with device info, you should search for device and select ‘Device.Read.All’ or ‘Device.ReadWrite.All’ permission and add it. You get the idea! You can add multiple permissions from various services into the app in one go, if needed.

As there will not be any user intervention to accept the consent, we will have to grant the consent as an administrator by clicking on the ‘Grant admin consent’ button after adding all the required permissions.

Grant admin consent

Make sure that there is a green tick against all the permissions.

Green tick grant consent

This completes the application setup in Azure AD for scripting purposes.

How To Create A Simple Script Using MS Graph?

Let’s try to create a basic script which will list all the users in the tenant and all the properties. We have set the variables & commands we need to get to a point where we can query the endpoint “”.

First, we need the client ID, secret, redirect uri & tenant name/id (to make it a generalized script). Let’s store all of those in a few variables as below.

Script variables

Next piece is the token endpoint. We can get all the endpoints from the application’s overview tab -> Endpoints. Copy the token endpoint and paste it in the script. You can change the tenant id from the url and add the tenant id variable to generalize it if required.

Token endpoint

We now need to create a splat with all the info we have for the client credentials flow, so the grant type will be client_credentials, the scope will be the graph endpoint (the ./default brings all the permissions assigned), client id & secret which we have stored safely.

Script with splat

Next, we use these info which is stored in $body and post it to the token endpoint to get an access token back. We use the Invoke-RestMethod command to achieve this.

$tokenreply = Invoke-RestMethod -Uri "$tenant_id/oauth2/v2.0/token" -Method Post -Body $body
Token reply 1

We will have the access token stored in the $tokenreply variable now. The token type is ‘Bearer’ and it also has the expiry information. You can use $tokenreply.access_token if you want to get your hands on the token.

Access token back

If you want to decode the token and see what it holds, open up & paste the token. The decoded token will show you the permissions assigned, the app in use, the tenant id, the API endpoint etc among many other things.

Token decoded

Finally we need to query graph endpoint for all the users in our tenant (which is our example use case). For that, let’s store the endpoint in a variable. say $graphendpoint = “” (beta API version gives more info than v1.0)

Next, we need to present the authorization headers which contains the access token to MS Graph using the Invoke-RestMethod. Run the command below to get past the authorization layer.

$Output = Invoke-RestMethod -Headers @{Authorization = "Bearer $($tokenreply.access_token)"} -Uri $graphendpoint -Method Get

The $Output.Value has all the information about my users.

Output user information

You can select the output you need and also export it to json, csv etc as you would do in PowerShell.

$Output.value | select userprincipalname, mail, displayname, usertype | export-csv .\Users.csv

This is a basic script which explains how to connect to MS Graph and get output using the client credential flow with the help of an Azure AD application. I am sure you can expand the script from here.

Graph Script

I have pasted what we have worked on so far below, so that you can copy & modify it the way you see fit.

$client_id = "client id"
$client_secret = "client secret"
$tenant_id = "tenant id"

$Body = @{
    grant_type = "client_credentials"
    scope = ""
    client_id = $client_id
    client_secret = $client_secret

$tokenreply = Invoke-RestMethod -Uri "$tenant_id/oauth2/v2.0/token" -Method Post -Body $Body

#Access token

$graphendpoint = ""

$Output = Invoke-RestMethod -Headers @{Authorization = "Bearer $($tokenreply.access_token)"} -Uri $graphendpoint -Method Get


$Output.value | select userprincipalname, mail, displayname, usertype | export-csv .\Users.csv

Do let me know if you have any questions in the comment section.

Other Popular Articles

How To Install Microsoft Graph Beta Module

Error – Select-MgProfile is not recognized as the name of a cmdlet, function or script file

Microsoft Graph

How To Work With Microsoft Graph Explorer

Microsoft Graph

How To Install & Work With Microsoft Graph

Leave a Comment

Disable Windows Copilot Using Intune

Windows Copilot is Microsoft’s take on making life easier for Windows users using the power of AI. This article explains how to disable the feature using Intune, if your organization is not ready yet to walk into the AI world.

Disable Windows Copilot Using Intune

We need to create a Configuration Profile for Windows devices in the Intune portal to disable Windows Copilot. Below are the steps that we need to create the profile.

Launch the Intune Portal and login as a Global Admin or Intune Admin.

Navigate to Devices -> Windows -> Configuration Profiles.

Windows Configuration Profile Intune

Click on Create -> New Policy.

Select Windows 10 & later as the platform and Settings Catalog as the profile type & click on the Create button.

Settings Catalog Intune CoPilot

Give the policy a meaningful name & description and click Next.

Policy Name Disable CoPilot

Within the configuration settings, click on the Add Settings option.

Add Settings Disable CoPilot

Search for ‘copilot’, Windows AI will come up as the category. Click on Windows AI and the Turn off Copilot in Windows (User) setting will come up. Check the box and click Next.

Turn off CoPilot Setting Intune
Turn off CoPilot Setting Intune Summary 1

Specify scope tags if required and click Next.

Select tags CoPilot Intune

Select who this policy should apply to in the Assignments section. I have selected to add all users. If you want to test the setting, you can create a test group and select that group here.

Similarly, you can also exclude certain group from disabling AI (say IT team) if required.

Add all users disable copilot intune

A summary of selected settings will be displayed. Click on the Create button to setup the policy to disable Windows Copilot.

Create configuration policy disable CoPilot Intune 1

Wait for the replication to complete in the cloud backend and login to your machine. Your chatty Copilot should now be disabled.

Disable Windows Copilot On Windows 11 Pro

Follow the steps below to disable Copilot on a personal Windows 11 Pro machine (say your own laptop).

Search for ‘group’ in Windows 11 and click on Edit Group Policy option.

Group Policy Windows 11 Disable Copilot

Navigate to User Configuration -> Administrative Templates -> Windows Components -> Windows Copilot.

Windows Copilot GPO setting

Double click on Turn off Windows Copilot setting on the right pane.

Select Enabled and click OK.

Turn off copilot gpo Windows 11 Pro 1

Close the Group Policy Editor. This will disable Windows Copilot on a Windows 11 Pro machine.


We have learned to disable Windows Copilot using Intune and Group Policy on Windows 11 machines.

Please let me know if you have any questions in the comments section.

Promote Windows Server 2025 To Domain Controller

Domain controllers are the backbone of any Active Directory domains in the Microsoft world. Any Windows server can be promoted to be a domain controller. In this article, we will go through the steps of promoting a Windows 2025 Server to be a domain controller.

Windows Server 2025

The latest version of the server operating system has been named Windows Server 2025. You can start with a 2025 Server & create an AD domain or you can promote a member server that is already a part of a domain.

The Windows Server 2025 needs to be installed on a machine before it can be promoted to be a domain controller.

Promote Windows Server 2025 To Domain Controller

If you have been working with Windows servers long enough, everything starts with the Server Manager app. Promoting a server to a domain controller is no different.

Launch ‘Server Manager’ & click on Add roles and features.

Windows 2025 Server Manager

You land on the summary page that explains what is required to run this wizard successfully. Click Next.

Windows Server 2025 Add Remove Roles

Select Role-based or Feature-based installation and click Next.

Windows Server 2025 Role Based Install

Select the server that needs to be promoted and click Next.

Windows Server 2025 Destination Server

Select Active Directory Domain Services (second option) and click on Add Features.

Windows Server 2025 AD Domain Services

Go with the default options for features that need to be installed.

Windows Server 2025 AD Domain Services Features

A summary of AD DS pops up next, click next to continue.

Windows Server 2025 AD DS

Select Restart the server automatically if required and click Install.

Windows Server 2025 AD Restart Server

You get to keep an eye on the progress of the installation.

Windows Server 2025 AD Install Progress

Once the role has been installed, you will find an exclamation mark on the top right corner of the Server Manager. Click on that and select Promote this server to be a domain controller.

Windows Server 2025 AD Install Continue

You get an error straight away (which you have never seen before) – Error determining whether the target server is already a domain controller. Role change is in progress or this computer needs a restart.

Windows Server 2025 Domain Controller Setup Error

We never needed to restart the server after installing the role in the DC promotion process. Given that it is an insider build of Server 2025, I am hoping that this will get fixed before the public release.

Restart the server, launch Server Manager and click on the Promote this server to be a domain controller option again.

Windows Server 2025 AD Install Continue 1

I am setting up a brand new AD forest and hence I select the third option (Add a new forest) and enter my root domain name.

Windows Server 2025 Add a forest

Next window brings the option to set your forest & domain functional level and the DSRM password. In the insider build, it shows what looks like a variable (the Windows server version on which the you are working).

Windows Server 2025 Forest Functional Level

You can leave the default options in the DNS options wizard and click next.

Windows Server 2025 DNS Options

Enter the netbios name of the domain in the next window and click next.

Windows Server 2025 Netbios Domain Name

You can stick with the default paths for the AD database, log & sysvol folder or pick a location of your choice.

Windows Server 2025 AD Paths

Review the selections that you have made so far and click next.

Windows Server 2025 Options Review

Wait for the green check mark on the prerequisites page and click next.

Windows Server 2025 Pre reqs Check

Click Install in the final window & wait for the magic to happen. Once the machine gets restarted (which it will do automatically), you will have a brand new domain controller based on Windows Server 2025.

Windows Server 2025 AD Snap In


Promoting a Server 2025 to a domain controller follows pretty much the same steps as previous operating systems. The Insider build has few errors that needs to be fixed, but hey, it is an insider build!

Please let me know if you have any questions in the comments section.

Install Windows Server 2025 – Full Guide

Microsoft has released an insider preview of it’s next server operating system named Windows Server 2025. We will have a look at the installation steps involved in setting up a 2025 server.

Windows Server 2025

Microsoft has gone with the same look and feel of Windows 11 operating system in it’s current server operating system – Windows Server 2025. As the product is in insider preview, there might be slight changes before it hits the public shelves.

It is refreshing to see a ‘modern’ feel in the installation process of a server operating system. Gone are the days where the installation of a consumer based OS felt much better compared to it’s server counterpart.

Installing Windows Server 2025

Let’s take a look at the steps involved in setting up a Windows Server 2025 machine. First step is to download the ISO from the Windows Insider portal.

Next step is to boot the virtual / physical machine from the ISO which will kick off the installation of Server 2025.

First option to select is the language settings. Pick the one based which relates to you and click next.

Windows Server 2025 language settings

Select the keyboard settings in the next screen and click next.

Windows Server 2025 keyboard

You get the option to select whether you want to Install Windows Server or Repair the installation. The bottom left corner also has the option to go to the previous version of setup.

Windows Server 2025 setup option

You are asked to enter the product key, which is available in the Windows Insider portal.

Windows Server 2025 product key

Next option to choose is the type of image you want to install – Windows 2025 core or full blown desktop experience.

Windows Server 2025 Desktop

You need to agree to the licensing terms to move forward in the next step.

Windows Server 2025 Agreement License

Select the partition on which the server OS should be installed and click next. You also have the option to slice the partitions the way you see fit in the same screen.

Windows Server 2025 Disk Partitions

The Ready to Install window comes up, click the install button.

Windows Server 2025 Install 1

Installation of Server 2025 is underway and you get to see the progress.

Windows Server 2025 Install Progress

Once the installation is complete, you need to enter an administrator password of your choice to finalize the setup.

Windows Server 2025 Password

And there you go! You see a Windows 11 login screen staring at you ;-)

Windows Server 2025 Login Screen

After logging in, you get to set the options around sending diagnostic data to Microsoft, which I always set as ‘required only’.

Windows Server 2025 Diagnostic Data

The Windows Server 2025 desktop looks similar, doesn’t it? ;-)

Windows Server 2025 Desktop Feel scaled

Now that the server is up and running, you can promote it to be a domain controller.


The Windows Server 2025 has the same look and feel as a Windows 11 operating system. The installation options also provide that modern ‘feel’ and makes it a bit soothing to the eyes!

Please let me know if you have any questions in the comments section.