Microsoft Graph : Piloter Intune avec PowerShell

Dans cet article nous allons voir comment gérer les ressources Intune via PowerShell.
Nous utiliserons pour cela l’API Microsoft Graph afin de se connecter sur Intune, gérer les ressources et exécuter des actions.

Vous pouvez retrouver ma série d’articles sur Intune et Autopilot:
Créer votre lab gratuit pour Intune/Autopilot : Partie 1 – Configuration de Intune
Créer votre lab gratuit pour Intune/Autopilot : Partie 2 – Autopilot en action
Créer votre lab gratuit pour Intune/Autopilot : Partie 3 – Gérer vos appareils
Microsoft Graph: Piloter Intune avec Graph Explorer

Dans cet article nous traiterons les points suivants:
– Comment se compose une requête Graph
– Choisissez la bonne méthode
– Les ressources Intune
– Trouver l’ID d’une ressource spécifique
– Graph, Intune et les permissions
– Lister, créer, modifier ou supprimer
– Gérer Intune depuis PowerShell
– Le module Graph.Intune
– Installer le module
– Se connecter à Intune
– Connexion avec des credetials sécurisés
– Comment trouver la cmdlet pour ce que je veux faire ?
– Pas de cmdlet ? Utiliser Invoke-MSGraphRequest
– Autre méthode que le module

Format d’une requête Graph

Microsoft Graph contient deux versions de l’API:
– v1.0: inclut les API disponibles (à utiliser en production)
– beta: inclut les API qui sont en version de dev ou test (pour vos tests)

Une requête débute toujours par le lien de Graph: https://graph.microsoft.com
La requête complète se compose telle que ci-dessous:
Lien de Graph + Version de l’API + Ressource à gérer

Cela se traduit tel que ci-dessous:
https://graph.microsoft.com/$APIVersion/$Resource

Si vous souhaitez agir sur une ressource spécifique, comme une machine, il faudra ajouter son ID à la requête.
https://graph.microsoft.com/$APIVersion/$Resource/$ID

Nous verrons dans la suite de cet article comment trouver l’ID d’une ressource.

Intune et ressources

Chaque composant de Intune est une ressource: un utilisateur, une machine, un profil de déploiement…
Toutes ces ressources sont accessibles aussi bien depuis Intune que depuis PowerShell (en utilisant l’API Graph).
Cela signifie que si vous souhaitez accéder et gérer une ressource Intune depuis PowerShell, il faudra trouver son équivalent dans l’API Graph.

Où trouver la bonne ressource avec Graph ?

Microsoft a mis à disposition une documentation très bien réalisée expliquant comment utiliser l’API, mais permettant également de naviguer au travers des différentes ressources.
Celle-ci est disponible ici
Recherchons maintenant l’équivalent sur Graph de quelques ressources Intune.

Appareils enrollés

Toutes les machines enrollées dans votre organisation sont accessibles depuis le portail Intune, comme ci-dessous:
Pour obtenir la même liste en utilisant Graph, il faudra procéder de la manière suivante:

1. Ouvrir la doc MS Graph
2. Choisissez la version de l’API (dans notre exemple Beta)
3. Dans la barre de recherche, saisissez: managed device
4. Cliquez ensuite sur managed device, dans la liste
5. Vous obtiendrez alors les informations requises pour gérer cette ressource
6. Pour comprendre comment lister les machines, cliquez sur Get
7. La partie Http request mentionne la ressource à utiliser: /deviceManagement/managedDevices

8/ Le lien complet de la requête sera: https://graph.microsoft.com/beta/deviceManagement/managedDevices

Action sur les machines

Il est possible d’effectuer différentes actions sur les machines depuis le portail Intune, voir ci-dessous:
Dans l’exemple suivant nous allons chercher l’équivalent Graph pour effectuer l’action redémarrer une machine depuis Graph.

1. Ouvrir la doc MS Graph
2. Choisissez la version de l’API (dans notre exemple Beta)
3. Dans la barre de recherche, saisissez: reboot
4. Cliquez ensuite sur rebootNow, dans la liste
5. Le lien de la ressource est le même que précédemment car il s’agit des appareils gérés. Il faudra y ajouter l’action à effectuer à la suite de la requête, à savoir rebootNow.
6. Celle-ci est: /deviceManagement/managedDevices/{ID of the device}/rebootNow
7. Le lien complet: https://graph.microsoft.com/beta/deviceManagement/managedDevices/{ID of the device}/rebootNow

Profil de déploiement

Les profils de déploiement Autopilot sont disponibles depuis le portail Intune, tel que ci-dessous:
Pour trouver son équivalent dans Graph, il faudra:

1. Ouvrir la documentation de MS Graph
2. Choisissez la version de l’API
3. Dans la barre de recherche, saisissez: deployment profile
4. Cliquez ensuite sur Windows autopilot deployment profile
5. Cliquez sur la méthode Get
6. La partie Http request mentionne la ressource à utiliser pour gérer les profils: /deviceManagement/windowsAutopilotDeploymentProfiles
7. Le lien complet de la requête sera: https://graph.microsoft.com/beta/deviceManagement/windowsAutopilotDeploymentProfiles

Trouver l’ID d’une ressource

Si vous souhaitez agir sur une ressource en particulier, par exemple redémarrer une machine, vous aurez besoin de son ID. Celui-ci est disponible depuis le portail Intune.

1. Cliquez sur la machine à redémarrer ou la ressource à gérer
2. L’ID est visible dans la barre d’adresse
3. Récupérez le pour l’ajouter à la suite de la requête, voir ci-dessous:

Choisissez la bonne méthode

Pour gérer une ressource Intune, il faut tout d’abord trouver le lien de cette ressource afin d’agir dessus.
Il faut ensuite choisir la méthode à utiliser, c’est à dire, ce que l’on souhaite faire sur la ressource.
Il existe cinq méthodes:
– GET: Lire les données d’une ressource
– POST: Créer une nouvelle ressource ou effectuer une action
– PATCH: Modifier les valeurs d’une ressource existante
– PUT: Remplacer une ressource par une autre
– DELETE: Supprimer une ressource

Graph, Intune et les permissions

Par défaut vous ne pouvez pas effectuer toutes les actions sur les ressources Intune en utilisant Graph.
Il faudra ajouter les permissions nécessaires à chaque ressource.

Comment savoir quelles permissions appliquer ?
Pour savoir quelle permission appliquer pour effectuer telle action, il faudra se rendre sur la documentation de Graph.
Les permissions seront affichées dans la partie Prerequisites.
Nous allons, par exemple, vérifier les permissions requises pour redémarrer une machine.

1/ Ouvrir la doc MS Graph
2/ Choisissez la version de l’API (dans notre exemple Beta)
3/ Dans la barre de recherche, saisissez: reboot
4/ Cliquez ensuite sur rebootNow, dans la liste
5/ La partie Prerequisites indique alors les permissions à avoir pour exécuter cette action

Lister, créer, modifier ou supprimer

Comme mentionné précédemment, cinq méthodes permettent d’effectuer des actions sur les ressources.

Get: Lister des ressources

Pour lister le contenu d’une ressource, par exemple les machines enrollées, il faudra utiliser la méthode: Get.
Pour lister les propriétés d’une machine spécifique nous utiliserons la méthode Get en ajoutant son ID à la requête.

Delete: Supprimer une ressource

Pour supprimer une ressource, tel qu’un profil de déploiement, la méthode à utiliser sera: Delete
Il faudra pour cela avoir l’ID de la ressource à supprimer.

Post: Ajouter une ressource ou exécuter une action

Pour créer une nouvelle ressource, telle qu’un profil de déploiement, la méthode à utiliser est: Post.
Cette méthode est un peu différente des méthodes Get et Delete.
En effet, pour créer une nouvelle ressource, il faudra fournir les informations de la ressource au format JSON.
Vous pouvez trouver une vue d’ensemble de ce JSON dans la partie Représentation JSON de la documentation Graph API, comme ci-dessous:

{ 
   "@odata.type": 
        "#microsoft.graph.azureADWindowsAutopilotDeploymentProfile", 
        "displayName": "My new profile for test", 
        "language": "en-US", 
        "deviceType": "windowsPc" 
}

Vous n’avez pas besoin de toutes les informations.
Vous pouvez simplement ajouter quelques paramètres, comme ci-dessous:

La méthode POST est également utilisée pour exécuter une action sur une ressource.
Dans ce cas vous n’aurez pas besoin d’un JSON à intégrer.
Il faudra procéder tel que ci-dessous:
1. Choisir la méthode POST
2. Ajouter l’ID de la ressource à la requête
3. Ajouter ensuite l’action à effectuer par exemple rebootNow

Patch: Modifier une ressource

Pour modifier les informations d’une ressource, utilisez la méthode Patch.
Celle-ci fonctionne comme la méthode Post, ce qui signifie qu’il faudra ajouter les informations JSON de la ressource que vous souhaitez modifier.
La différence est que vous devez ajouter l’ID de la ressource à gérer à la requête de ressource.
Si vous souhaitez, par exemple, ajouter une description au profil de déploiement que nous venons de créer, utilisez le JSON ci-dessous:

{ "@odata.type": 
"#microsoft.graph.azureADWindowsAutopilotDeploymentProfile", 
"description": "This is my description" 
}

Nous avons vu, jusqu’à présent, ce qu’est la requête Graph et comment gérer les ressources à l’aide des méthodes disponibles.
Nous allons maintenant voir comment procéder à partir de PowerShell.

PowerShell: Le module Intune

Quel est ce module?

Un moyen facile de gérer avec Intune est d’utiliser le module Microsoft.Graph.Intune.
Pour l’instant, le module ne contient pas de cmdlets pour chaque composant Intune.
Nous verrons comment gérer les ressources ne disposant pas encore de cmdlet.
Ce module a été créé par Microsoft.
Vous pouvez trouver plus d’informations ici

Installer le module

Pour l’installer, utilisez la commande install-module, comme ci-dessous:

Install-Module Microsoft.Graph.Intune

Ci-dessous une fonction pour installer le module:

function Get-IntuneModule { 
   If (!(Get-Module -listavailable | where {
      $_.name -like "*Microsoft.Graph.Intune*"
})) 
{ Install-Module Microsoft.Graph.Intune -ErrorAction SilentlyContinue } 
Else { Import-Module Microsoft.Graph.Intune -ErrorAction SilentlyContinue } }

Une fois le module installé, vous pouvez lister toutes les cmdlets disponibles comme ci-dessous:

Se connecter à Intune

Cherchons maintenant, une commande qui sera utile pour se connecter à Intune.
Pour cela, utilisons la ligne ci-dessous:

Pour cela, procédez comme suit:

Get-Command -module Microsoft.Graph.Intune | Where {((
$_.Name -like "*connect*") -and ($_.CommandType -eq "cmdlet"
))}

Yipi Kayyyyy, une correspondance, la cmdlet: Connect-MSGraph
Essayons-la sans aucune personnalisation.
Nous allons essayer de lister les périphériques Intune.
Pour rechercher la cmdlet appropriée, tapez la ligne ci-dessous:

Get-Command -module Microsoft.Graph.Intune | Where {((
$_.Name -like "*manageddevice*") -and ($_.CommandType -eq "cmdlet"
))}

Il existe une cmdlet avec le verbe get: Get-DeviceManagement_ManagedDevices
Voyons maintenant ce que cela fait si nous saisissons cette cmdlet:

Get-DeviceManagement_ManagedDevices

Cette erreur apparaît car nous devons nous connecter auparavant pour répertorier les ressources Intune.

1. Saisissez Connect-MSGraph
2. Saisissez vos informations d’identification Intune
3. Saisissez vos identifiants et cliquez sur Se connecter
4. Saisissez à nouveau: Get-DeviceManagement_ManagedDevices
5. Ceci listera les appareils

Se connecter avec des identifiants sécurisés

Au lieu de demander les informations d’identification de l’utilisateur, nous les enregistrerons afin de les utiliser automatiquement.

  • Le compte utilisateur intune est enregistré dans une variable: $Intune_UDP
  • Le mot de passe sera enregistré dans un fichier texte: $Intune_PWD_File

1/ Dans cette partie, nous allons créer un mot de passe crypté et le sauvegarder

$Intune_PWD_File = $env:temp + "Intune_PWD_File.txt"
$Intune_PWD = "$y$t@ndD€plo0y"
$Intune_PWD | ConvertFrom-SecureString | Out-File $Intune_PWD_File

2/ Ensuite, nous allons importer le contenu de ce fichier dans une variable

$adminPwd = Get-Content $Intune_PWD_File | ConvertTo-SecureString

3/ Nous allons maintenant créer un objet PSCredential pour notre compte Intune

$creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ($Intune_UDP, $adminPwd)

4/ Ajoutez un paramètre PSCredential à la cmdlet Connect

Connect-MSGraph -PSCredential $creds

5/ Voir ci-dessous le script complet :

$Intune_UDP = "dvr-adm@systanddeploy.com"
$Intune_PWD | ConvertFrom-SecureString | Out-File $Intune_PWD_File
$adminPwd = Get-Content $Intune_PWD_File | ConvertTo-SecureString
$creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ($Intune_UDP, $adminPwd)
Connect-MSGraph -PSCredential $creds

Trouver la bonne cmdlet

Le module contient beaucoup de cmdlets (1056), ce qui signifie qu’il peut être un peu difficile de trouver cmdlet appropriée pour trouver une ressource spécifique.

Lister les appareils
Nous souhaitons, par exemple, lister les machines enrollées dans Intune.
Dans le portail Intune, celles-ci sont comme ci-dessous (comme nous l’avons vu précédemment):

1.  La cmdlet à utiliser est la suivante: Get-DeviceManagement_ManagedDevices
2. Saisissez cette cmdlet
3. Les appareils seront listés
4. Pour lister les propriétés d’une machine, ajoutez le paramètre managedDeviceid suivi de l’ID

Action sur une machine
Nous allons vérifier la cmdlet pour redémarrer un ordinateur.
La cmdlet appropriée est: Invoke-DeviceManagement_ManagedDevices_RebootNow
Voyons comment l’utiliser à l’aide de la cmdlet get-help tel que ci-dessous:
Comme vous pouvez le constater, pour redémarrer un périphérique spécifique, il faudra spécifier son ID en ajoutant le paramètre: managedDeviceId
Dans l’exemple ci-dessous, nous allons redémarrer le périphérique avec l’ID: 988bfcaf-15d7-403c-a1ba-9072677e254e
Voir ci-dessous la cmdlet complète pour redémarrer la machine

Invoke-DeviceManagement_ManagedDevices_RebootNow -managedDeviceId "988bfcaf-15d7-403c-a1ba-9072677e254e"

Voir l’avertissement de redémarrage sur la machine:

Aucune cmdlet ? Invoke-MSGraphRequest

Si vous ne trouvez pas la cmdlet pour gérer votre ressource, vous pouvez utiliser la cmdlet: Invoke-MSGraphRequest.
Celle-ci permet d’exécuter une requête en utilisant la lien de la ressource.
Il faudra donc au préalable avoir trouvé le lien permettant d’attaquer la ressource à gérer.

Celle-ci s’utilise da la façon suivante:

  • Saisissez: Invoke-MSGraphRequest
  • Ajoutez l’URL de vos ressources en ajoutant le paramètre -url
  • Ajouter la méthode à utiliser, en utilisant le paramètre –HttpMethod
  • Ajouter l’ID de la ressource si nécessaire
  • Ajouter un JSON, en utilisant le paramètre Content (pour les méthodes Post et Patch)

Nous allons maintenant voir, comment gérer, par exemple, les profils de déploiement autopilot via le module.
En cherchant dans les cmdlets disponibles nous ne trouvons rien.
Nous allons utiliser la cmdlet Invoke-MSGraphRequest.
Comme vu précédemment, la ressource appropriée est: deviceManagement / windowsAutopilotDeploymentProfiles
Procédez maintenant comme ci-dessous:

1/ Nous allons utiliser la méthode : Get
2/ Nous allons utiliser le paramètre HttpMethod avec le lien de ressource ci-dessous :
https://graph.microsoft.com/beta/deviceManagement/windowsAutopilotDeploymentProfiles
3/ Voir ci-dessous le lien complet pour le faire :

Invoke-MSGraphRequest -Url "https://graph.microsoft.com/beta/deviceManagement/windowsAutopilotDeploymentProfiles" -HttpMethod Get

4/ Pour lister la propriété et la valeur, tapez la commande ci-dessous :

(Invoke-MSGraphRequest -Url "https://graph.microsoft.com/beta/deviceManagement/windowsAutopilotDeploymentProfiles" -HttpMethod Get).Value

5/ Ci-dessous le résultat :

Créer un profil de déploiement

Pour créer un profil de déploiement, nous avons besoin de quatre choses:

  • Cdmlet Invoke-MSGraphRequest
  • Le lien de la ressource
  • Méthode POST
  • Informations JSON de la ressource à créer

1/ Voir ci-dessous les informations JSON que nous utiliserons :

{
    "@odata.type": "#microsoft.graph.azureADWindowsAutopilotDeploymentProfile",
    "displayName": "My new profile for test"
}

2/ Nous l’intégrerons dans une variable comme ci-dessous :

$MyProfile = @"
    "@odata.type": "#microsoft.graph.azureADWindowsAutopilotDeploymentProfile",
    "displayName": "My new profile for test"
}
"@

3/ Voir ci-dessous la requête complète :

$MyProfile = @"
{
    "@odata.type": "#microsoft.graph.azureADWindowsAutopilotDeploymentProfile",
    "displayName": "My new profile for test"
}
"@
Invoke-MSGraphRequest -Url "https://graph.microsoft.com/beta/deviceManagement/windowsAutopilotDeploymentProfiles" -HttpMethod Post -Content $MyProfile -ErrorAction Stop

4/ Ci-dessous le résultat :

Mettre à jour un profil de déploiement


Utilisons maintenant la même cmdlet pour mettre à jour un profil de déploiement afin d’y ajouter une description.

1/ Nous allons changer la description de l’appareil avec l’ID
2/ Nous allons utiliser la méthode PATCH
3/ Voir ci-dessous les informations JSON que nous utiliserons :

$MyProfile = @"
{
    "@odata.type": "#microsoft.graph.azureADWindowsAutopilotDeploymentProfile",
    "description": "This is my new new description"	
}
"@

4/ Voir ci-dessous la requête complète:

$MyProfile = @"
{
    "@odata.type": "#microsoft.graph.azureADWindowsAutopilotDeploymentProfile",
    "description": "This is my new new description"	
}
"@
Invoke-MSGraphRequest -Url "https://graph.microsoft.com/beta/deviceManagement/windowsAutopilotDeploymentProfiles/7c0e6308-12d7-4734-9fb5-62e8e580dbbc" -HttpMethod PATCH -Content $MyProfile -ErrorAction Stop

Supprimer un profil de déploiement

1/ Nous allons supprimer le périphérique avec l’ID
2/ Nous allons utiliser la méthode Delete
3/ Voir ci-dessous la requête complète :

Invoke-MSGraphRequest -Url "https://graph.microsoft.com/beta/deviceManagement/windowsAutopilotDeploymentProfiles/7c0e6308-12d7-4734-9fb5-62e8e580dbbc" -HttpMethod DELETE -ErrorAction Stop

Nous allons maintenant voir une autre méthode pour gérer Intune avec PowerShell sans le module.

Gérer Intune sans le module

Vous pouvez trouver sur le GitHub de MSGraph plusieurs façons de se connecter à Intune à l’aide de PowerShell.
L’une d’elles consiste à utiliser une fonction Get-AuthToken puis à vous connecter à Intune.
Cette méthode est utilisée dans le module WindowsAutopilotIntune de Michael Niehaus.

Cette méthode est composée de deux fonctions :

  • Get-AuthToken: Créer le processus d’authentification
  • Connect-AutoPilotIntune: Connecter à Intune

Les fonctions

Get-AuthToken

h3><strong data-rich-text-format-boundary="true">Les fonctions<br data-rich-text-line-break="true"></strong></h3>
<p><strong>Get-AuthToken</strong></p>

Get-AuthToken
function Get-AuthToken {
<#
.SYNOPSIS
Internal function used by the Connect-AutoPilotIntune function.
#>

[cmdletbinding()]
param
(
    [Parameter(Mandatory=$true)] $User
)
    $userUpn = New-Object "System.Net.Mail.MailAddress" -ArgumentList $User
    $tenant = $userUpn.Host
    Write-Host "Checking for AzureAD module..."
    $AadModule = Get-Module -Name "AzureAD" -ListAvailable
    If ($AadModule -eq $null) 
		{
			Write-Host "AzureAD PowerShell module not found, looking for AzureADPreview"
			$AadModule = Get-Module -Name "AzureADPreview" -ListAvailable
		}
    If ($AadModule -eq $null) 
		{
			write-host "AzureAD Powershell module not installed..." -f Red
			write-host "Install by running 'Install-Module AzureAD' or 'Install-Module AzureADPreview' from an elevated PowerShell prompt" -f Yellow
			write-host "Script can't continue..." -f Red
			exit
		}
    # Getting path to ActiveDirectory Assemblies
    # If the module count is greater than 1 find the latest version
    If($AadModule.count -gt 1)
		{
			$Latest_Version = ($AadModule | select version | Sort-Object)[-1]
			$aadModule = $AadModule | ? { $_.version -eq $Latest_Version.version }
			# Checking If there are multiple versions of the same module found
			If($AadModule.count -gt 1)
				{
					$aadModule = $AadModule | select -Unique
				}
			$adal = Join-Path $AadModule.ModuleBase "Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
			$adalforms = Join-Path $AadModule.ModuleBase "Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll"
		}
    Else 
		{
			$adal = Join-Path $AadModule.ModuleBase "Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
			$adalforms = Join-Path $AadModule.ModuleBase "Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll"
		}
    [System.Reflection.Assembly]::LoadFrom($adal) | Out-Null
    [System.Reflection.Assembly]::LoadFrom($adalforms) | Out-Null
    $clientId = "d1ddf0e4-d672-4dae-b554-9d5bdfd93547"
    $redirectUri = "urn:ietf:wg:oauth:2.0:oob"
    $resourceAppIdURI = "https://graph.microsoft.com"
    $authority = "https://login.microsoftonline.com/$Tenant"
    Try 
		{
			$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority
			# https://msdn.microsoft.com/en-us/library/azure/microsoft.identitymodel.clients.activedirectory.promptbehavior.aspx
			# Change the prompt behaviour to force credentials each time: Auto, Always, Never, RefreshSession
			$platformParameters = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters" -ArgumentList "Auto"
			$userId = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentIfier" -ArgumentList ($User, "OptionalDisplayableId")
			$authResult = $authContext.AcquireTokenAsync($resourceAppIdURI,$clientId,$redirectUri,$platformParameters,$userId).Result

			# If the accesstoken is valid then create the authentication header
			If($authResult.AccessToken)
				{
					# Creating header for Authorization token
					$authHeader = @{
						'Content-Type'='application/json'
						'Authorization'="Bearer " + $authResult.AccessToken
						'ExpiresOn'=$authResult.ExpiresOn

					}
					return $authHeader
				}
			Else 
				{
					Write-Host "Authorization Access Token is null, please re-run authentication..." -ForegroundColor Red
					break
				}
		}
    catch 
		{
			write-host $_.Exception.Message -f Red
			write-host $_.Exception.ItemName -f Red
			break
		}
}








Connect-AutoPilotIntune
function Connect-AutoPilotIntune {
	<#
	.SYNOPSIS
	Authenticates and connects to Azure Active Directory via the Microsoft Graph.

	.DESCRIPTION
	The Connect-AutoPilotIntune function is used to authenticate and connect to Azure Active Directory via the Microsoft Graph API web services.  You can optionally specIfy a user principal name (UPN).  The password will be requested using a standard Azure AD form.

	.PARAMETER user
	User principal name (UPN) that should be used for authentication, which also determines the tenant for the connection.  If not specIfied, an interactive prompt will be presented.

	.EXAMPLE
	Connect to the Microsoft Graph API using the specIfied user

	Connect-AutoPilotIntune –user user@contoso.onmicrosoft.com

	.NOTES
	The AzureAD or AzureADPreview modules must be present before this cmdlet can be used.  These can be installed using a command line:

	Install-Module -Name AzureAD

	#>
[cmdletbinding()]
param
(
    [Parameter(Mandatory=$false)] $user = ""
)
    # Checking If authToken exists before running authentication
    If($global:authToken)
		{
			# Setting DateTime to Universal time to work in all timezones
			$DateTime = (Get-Date).ToUniversalTime()
			# If the authToken exists checking when it expires
			$TokenExpires = ($authToken.ExpiresOn.datetime - $DateTime).Minutes
			If($TokenExpires -le 0)
				{
					write-host "Authentication Token expired" $TokenExpires "minutes ago" -ForegroundColor Yellow
					# Defining User Principal Name If not present
					If($user -eq $null -or $user -eq "")
						{
							$user = Read-Host -Prompt "Please specIfy your user principal name for Azure Authentication"
						}
					$global:authToken = Get-AuthToken -User $user
				}
		}

    # Authentication doesn't exist, calling Get-AuthToken function
    Else 
		{
			If ($user -eq $null -or $user -eq "")
				{
					$user = Read-Host -Prompt "Please specIfy your user principal name for Azure Authentication"
				}

			# Getting the authorization token
			$global:authToken = Get-AuthToken -User $User
		}
}

<p><br data-rich-text-line-break="true"><strong>Connect-
<h3><strong data-rich-text-format-boundary="true">Se connecter à Intune</strong></h3>

1/ Exécuter les deux fonctions
2/ Saisissez Connect-AutoPilotIntune
3/ Saisissez votre courrier utilisateur Intune
4/ Une page Web sera ouverte pour taper votre mot de passe
5/ Vous êtes maintenant connecté à votre tenant Intune

Tester une requête simple


Utilisons l’API Graph pour lister certaines ressources Intune.
Pour cet exemple, nous allons lister les appareils.
Pour interroger Intune, la cmdlet est: Invoke-RestMethod

1/ La ressource pour les appareils est : deviceManagement / managedDevices
2/ L’URL complète est : https://graph.microsoft.com/beta/deviceManagement/managedDevices
3/ Saisissez la commande suivante pour lister les périphériques :

Invoke-RestMethod -Uri "https://graph.microsoft.com/beta/deviceManagement/managedDevices" -Headers $authToken -Method Get

4/ Voir ci-dessous le résumé:

Nous allons maintenant tester nos deux requêtes précédentes qui ont échoué avec le module.

Modifier un profil

1/ Utilisez la cmdlet Invoke-RestMethod
2/ Ajoutez le lien de ressource:
https://graph.microsoft.com/beta/deviceManagement/windowsAutopilotDeploymentProfiles
3/ Ajoutez l’ID du profil de déploiement à modifier
4/ Nous allons utiliser la méthode: PATCH
5/ Nous allons copier le nouveau JSON avec notre modification dans une variable :

$MyProfile = @"
{
    "@odata.type": "#microsoft.graph.azureADWindowsAutopilotDeploymentProfile",
    "description": "This is my new new description"	
}
"@

6/ Voir ci-dessous la requête complète :

$MyProfile = @"
{
    "@odata.type": "#microsoft.graph.azureADWindowsAutopilotDeploymentProfile",
    "description": "This is my new new description"	
}
"@
Invoke-RestMethod -Uri "https://graph.microsoft.com/beta/deviceManagement/windowsAutopilotDeploymentProfiles/C5fa4a66-14f4-4126-b35e-1277203d82c7" -Headers $authToken -Body $MyProfile -Method Patch

Supprimer un profil de déploiement

1/ Utilisez la cmdlet Invoke-RestMethod
2/ Ajoutez le lien de ressource :
https://graph.microsoft.com/beta/deviceManagement/windowsAutopilotDeploymentProfiles
3/ Ajoutez l’ID du profil de déploiement à supprimer
4/ Nous allons utiliser la méthode : DELETE
5/ Voir ci-dessous la requête complète :

Invoke-RestMethod -Uri "https://graph.microsoft.com/beta/deviceManagement/windowsAutopilotDeploymentProfiles/C5fa4a66-14f4-4126-b35e-1277203d82c7" -Headers $authToken -Method Delete

A propos de l'auteur

Damien VAN ROBAEYS

Ingénieur Systèmes travaillant principalement sur ce qui tourne autour du poste de travail (MDT, SCCM, Intune) et l’automatisation avec PowerShell. MVP Microsoft et auteur pour ENI, il publie régulièrement sur son blog et gère différents groupes Facebook, PowerShell et WPF (~4000 membres), Windows Autopilot (~3000 membres).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *