Astuces SharePoint Online avec PnP-PowerShell

Cet article recense des opérations hyper-condensées en PnP-PowerShell vous permettant de gérer vos sites SharePoint Online. Avant de vous en servir, assurez-vous d’avoir installé les modules PnP-PowerShell (disponibles ici), d’avoir lancé une fenêtre PowerShell (ISE ou non), et de vous être connecté à votre collection de sites à l’aide la commande Connect-PnPOnline.

Remarque : ces commandes n’ont pas vocation à être performantes en temps d’exécution, simplement à rendre un service en un minimum de lignes. Donc, à ne pas utiliser sur des volumes de données très importants

(suite…)

Alternative aux dépréciations de commandes PowerShell Skype et Teams

Le saviez vous?

Si dans le cadre de l’administration d’infrastructure Skype Team Online, vous utilisiez des commandes Powershell telles que Get-CsActiveUserReport, Get-CsP2PSessionReport, Get-CsUserActivitiesReport, Get-CsConferenceReport… Sachez que ces commandes (et d’autres) ont été dépréciées par Microsoft depuis le début d’année 2018.

blog ai3 depreciated_cmd-300x17 Alternative aux dépréciations de commandes PowerShell Skype et Teams

La solution de remplacement à ces commandes se trouve donc être désormais Microsoft Graph.
Microsoft Graph permet d’accéder aux données et aux renseignements dans Office 365 en utilisant l’API fournie par Microsoft dans le but de créer des applications pour les organisations et les clients afin de se connecter directement à de nombreuse ressources via un point de connexion unique, https://graph.microsoft.com, notamment pour:

– Azure Active Directory
– Les services Office 365: Sharepoint, OneDrive, Outlook/Exchange, Skype Teams…
– …

blog ai3 MSGRAPH-300x187 Alternative aux dépréciations de commandes PowerShell Skype et Teams

Microsoft Graph se connecte à toutes les ressources de ces services à l’aide de relations. Par exemple, un utilisateur peut être connecté à un groupe via une relation memberOf et à un autre utilisateur via une relation manager. L’application peut donc parcourir ces relations pour accéder à aux ressources connectées et effectuer des actions via l’API.

Vous pouvez également obtenir des informations précieuses sur les données de Microsoft Graph. Par exemple, vous pouvez récupérer les informations concernant l’usage de Skype Teams au sein de l’organisation (nombre de session Audio/Vidéo, nombre de connexion, temps de chaque session…)

Ci dessous un exemple de script permettant la récupération des informations concernant l’activité des utilisateurs Skype Online.
blog ai3 example1-1-300x103 Alternative aux dépréciations de commandes PowerShell Skype et Teams
Exemple d’un fichier d’extraction en sortie de script:
blog ai3 example2-300x118 Alternative aux dépréciations de commandes PowerShell Skype et Teams

Source: https://developer.microsoft.com/fr-fr/graph

Azure VM Scale Sets : 3 Création du scaleset à partir du vhd

Dans le dernier article de cette série nous allons :

  • Récupérer le blob du vhd modèle
  • Créer un scaleset à partir du vhd
  • Mettre à jour un scaleset à partir du vhd

Cet article s’inscrit dans une série d’articles visant à montrer comment créer un groupe de machines virtuelles identiques à partir d’une machine virtuelle modèle.

3ème étape créer ou mettre à jour le scaleset

1. Initialiser les variables

2. Récupérer le blob du vhd modèle

3. Créer le VMSS à partir du vhd

Nous allons vérifier si un groupe de machine existe déjà, sinon nous allons créer celui-ci.

Comme pour la copie de la vm nous utilisons un template ARM pour configurer la machine. Pour des informations plus détaillées sur celui-ci vous pouvez vous référer à la documentation officielle.

La partie intéressante est « virtualMachineProfile », c’est dans celle-ci que l’on indique que le scaleset se base sur le vhd de la machine modèle.

Le fichier suivant contient les paramètres du template ARM :

4. Mettre à jour le scaleset à partir du vhd

Si vous avez déjà créé le groupe de machines virtuelles il est possible de mettre à jour celui-ci à partir de votre nouvelle image modèle. Il faut ensuite déployer sur chaque instance de votre scaleset la mise à jour.

A l’issue de cette série d’articles nous avons, à l’aide de powershell et des templates ARM:

  • Créé une copie d’une vm existante
  • Généralisé celle-ci
  • Transféré le vhd d’un espace de stockage à un autre
  • Créé ou mis à jour un scale set à partir de l’image

J’espère que cette série d’article a pu vous éclairer sur ce processus !

 

Azure VM Scale Sets : 2 Création du vhd modèle

Dans ce second article sur Azure nous allons :

  • Généraliser notre VM modèle temporaire
  • Sauvegarder notre image modèle ainsi générée

Lors de la première étape nous avons créé une machine virtuelle, copie temporaire de notre modèle, sur laquelle nous avons automatiquement lancé un script de généralisation. Un fichier .vhd sera généré et sera prêt à être utilisé dans un scaleset azure à l’issue de cet article.

2ème étape généraliser la machine virtuelle temporaire

1. Récupérer et éteindre la vm modèle temporaire

2. Finaliser la généralisation de la vm temporaire

A l’étape précédente nous avons généralisé la vm à l’aide de sysprep.exe. Il faut indiquer à Azure que la machine a été généralisée.

3. Sauver la vm généralisée sous la forme d’un vhd

Maintenant que notre machine virtuelle est entièrement généralisée nous pouvons extraire l’image (vhd) que nous utiliserons pour le scaleset.

Le paramètre -Path correspond au chemin local du template arm automatiquement généré.

4. Supprimer la vm généralisée temporaire

La machine temporaire n’est plus d’aucune utilité et peut être supprimée.

 

Dans le prochain article nous verrons comment utiliser le vhd généré pour créer notre scaleset.

Si vous avez besoin de transférer le vhd d’un storage à un autre vous pouvez utiliser un outil tel que cloud berry. Ou aller voir cet article expliquant comment effectuer le transfert à l’aide de powershell.

Azure VM Scale Sets : 1 Copie de la VM modèle

Dans cette série d’article nous allons explorer les groupes de machines virtuelles identiques (scaleset) Azure à l’aide de powershell et des template ARM.

Dans ce premier article nous allons :

  • Créer une copie d’une machine virtuelle azure à l’aide de script powershell et de template arm
  • Configurer cette copie pour qu’un script de généralisation se lance automatiquement au démarrage

Rapide rappel sur les Scale Sets azure à partir de la documentation microsoft :

Les groupes identiques de machines virtuelles Azure vous permettent de créer et de gérer un groupe de machines virtuelles identiques et disposant d’une charge équilibrée. Le nombre d’instances de machine virtuelle peut augmenter ou diminuer automatiquement en fonction d’une demande ou d’un calendrier défini.

Nous allons nous baser sur un cas d’utilisation de cette technologie :

  • Le client dispose d’une vm sur azure et souhaite, à partir de celle-ci, créer une collection de machine afin de pouvoir simplement créer ou supprimer des machines de sa collection en fonction de la charge actuelle
  • Le client à deux options :
    • A partir de sa machine créer une image fixe et déployer celle-ci sur son scaleset :
      Pros : l’utilisateur aura une copie conforme de sa machine
      Cons : si l’utilisateur met à jour sa machine modèle il devra écraser chaque machine le scaleset pars sa nouvelle image
    • Créer un scaleset à partir d’une image par défaut. Lors de la création d’une image lancer un script qui installera les composants nécessaires
      Pros : les machines auront toujours la dernière version de Windows, en cas de mis à jour d’un service/application il suffit de propager uniquement cette mise à jour
      Cons : lors de la création d’une machine il est nécessaire de configurer et d’installer les composants nécessaires

Nous allons explorer la première option.

1ère  étape : créer une copie temporaire de la machine modèle

1. Installer le module azure de powershell (si nécessaire)

2. Initialiser les variables

3. Initialiser les accès

4. Récupérer la machine modèle et l’éteindre si nécessaire

5. Copier le vhd de la machine modèle

Le processus de généralisation d’une machine est définitif, une fois celle ci généralisée il n’est plus possible d’utiliser celle-ci. Nous allons donc d’abord créer une copie temporaire de notre modèle que nous utiliserons pour la généralisation, laissant ainsi notre machine modèle intacte. Pour cela nous allons d’abord copier le vhd de la machine modèle dans notre storage.

6. Créer un script de généralisation

Afin qu’une VM puisse être généralisée l’outil sysprep.exe doit être lancé. Pour éviter d’avoir à manuellement se connecter sur la VM pour lancer sysprep.exe nous allons copier le script powershell suivant dans notre storage. Ce script sera lancé automatiquement au démarrage de la VM.

7. Créer une VM temporaire

Remarquez que nous utilisons ici un template ARM json pour instancier notre nouvelle vm, vous pouvez récupérer celui ci directement depuis le portail azure, azure resource explorer, ou le créer vous même à partir de la documentation microsoft.

Deux parties sont importantes dans notre cas :

  • « storage profile » précise que la VM crée se base sur un vhd existant pointant vers l’url de notre copie temporaire
  • « CustomScriptExtension » ajoute une extension qui lancera le script de généralisation au démarrage de notre vm temporaire, notez qu’il est possible de passer des arguments à ce script pour, par exemple, s’assurer de la configuration de votre vm temporaire

Le fichier suivant contient les paramètres par défaut de votre template ARM, il doit être sur la machine lançant le script powershell :

Dans le prochain article nous verrons comment utiliser cette VM pour créer le vhd qui sera utilisé pour le scaleset.

 

Scanner la totalité des features d’une ferme SharePoint

Un article de Benoît Bernardin

Il y a des cas, comme lors d’une migration SharePoint, ou il est utile d’avoir une vue d’ensemble des features d’une ferme SharePoint.

Je me suis trouvé dans cette situation donc, j’ai sorti le meilleur outil pour m’aider : PowerShell. Et, j’ai écrit un script qui itère les features d’une ferme SP en couvrant la totalité des scopes (Farm, Web App, Site et Web) puis, enregistre le résultat dans des fichiers CSVs. L’avantage des CSVs est qu’on peut facilement les exploiter (par exemple: les ouvrir dans Excel et faire des tableaux croisés-dynamiques).

Dans mon cas j’ai décidé de faire plusieurs fichiers car avec plus de 50 Web Apps dans la ferme cible, la quantité de données devenait importante, mais, les fichiers ayant volontairement un schéma similaire, il est facile de les agréger si besoin.

blog ai3 scanspfeatures-300x164 Scanner la totalité des features d’une ferme SharePoint

Le script fonctionne sur SharePoint 2010 et SharePoint 2013. Je pense que c’est un outil à garder dans sa boite à malice SharePoint.

Le script est disponible en téléchargement ici

Avis aux amateurs. ?

La gestion des licences Office 365 par PowerShell

Bonjour à tous,

Dans cet article, nous allons évoquer la gestion des licences par Powershell. En effet, la première porte pour accéder aux applications Office 365 est de fournir à vos utilisateurs une licence et de configurer les options disponibles sur celle-ci. Cette partie est par conséquent très importante dans l’administration de votre tenant.

Les licences disponibles pour votre tenant sont visibles via le portail d’administration, menu Facturation puis Licences :

blog ai3 File01-1024x599 La gestion des licences Office 365 par PowerShell

 

La colonne Valide(s) nous indique le nombre total de licences disponibles et la colonne Affectée(s) le nombre de licences utilisées.

Voyons voir cette scène au ralenti et trouvons maintenant ces informations via « Coquillage Puissant » :

blog ai3 File02-300x67 La gestion des licences Office 365 par PowerShell

 

La commande Get-MsolAccountSku nous permet de visualiser nos différentes licences.

Si nous mettons cette information dans une variable ($Sku = Get-MsolAccountSku), celle-ci sera un tableau avec autant de lignes que de licences.

Nous pouvons aisément réaliser un script pour extraire de manière quotidienne le statut des licences :

blog ai3 File03-1024x272 La gestion des licences Office 365 par PowerShell

 

Maintenant que nous avons nos licences, il est temps de voir les applications liées à celles-ci.

En effet, ces licences contiennent un ensemble d’applications comme le montre la capture suivante par le GUI :

blog ai3 File04 La gestion des licences Office 365 par PowerShell

Les mêmes données en Powershell :

blog ai3 File05 La gestion des licences Office 365 par PowerShell

Cette commande nous permet de visualiser les différents éléments d’une licence ainsi que leur statut.

Le  statut « PendingActivation » sur le composant « INTUNE_O365 » indique que l’application doit être dans un premier temps activée pour cet utilisateur par un Administrateur.

Maintenant rentrons dans le vif du sujet afin d’affecter des licences en masse … (Jeanne si tu nous écoutes 😉 )

Tout d’abord, avant d’affecter une licence à un utilisateur, il est impératif de définir l’emplacement auquel il appartient. Cela se passe via la cmdlet set-msoluser :

 blog ai3 File06-1024x74 La gestion des licences Office 365 par PowerShell

blog ai3 File07-1024x86 La gestion des licences Office 365 par PowerShell

« FR » pour France, « GB » pour United Kingdom, « DE » pour Allemagne, …

Une fois l’emplacement défini, affectons maintenant une licence via la cmdlet suivante set-msoluserlicense.

Dans l’exemple ci-dessous, nous attribuons une licence complète (avec toutes ces applications) à notre utilisateur :

blog ai3 File08-1024x267 La gestion des licences Office 365 par PowerShell

Pour désactiver certaines options d’une licence, il est nécessaire de définir en amont une variable qui contiendra les éléments à ne pas inclure.

Cette variable sera ensuite utilisée en paramètre (« -LicenseOptions » ) de la cmdlet set-msoluserlicense :

blog ai3 File09-1024x313 La gestion des licences Office 365 par PowerShell

Et hop, voici le résultat :

blog ai3 File10-1024x290 La gestion des licences Office 365 par PowerShell

Ou par le GUI :

blog ai3 File11 La gestion des licences Office 365 par PowerShell

 

Cool, non ? Avec ces différentes cmdlet, nous pouvons activer en masse ou alors modifier les options des différentes licences !

Maintenant, si nous souhaitons lister et exporter tous les utilisateurs et leurs licences associées, voici une fonction et sa cmdlet que nous pouvons utiliser :

Function LicenceAll ($UPN) {Get-MsolUser -UserPrincipalName $UPN | Select Licenses | % {$_.Licenses | % {$SkuPartNumber = $_.AccountSku.SkuPartNumber;$_.ServiceStatus | Select @{N=’UPN’;E={$UPN}},@{N=’LicenseType’;E={$SkuPartNumber}},@{N=’ServicePlan’;E={$_.ServicePlan.ServiceName}}, ProvisioningStatus}}}

Get-MsolUser -All | ? {$_.IsLicensed -eq « TRUE »}| % {LicenceAll $_.UserPrincipalName} | Export-Csv c:\temp\ToutesLesLicences.csv -Encoding Unicode -NoTypeInformation -Delimiter « ; »

blog ai3 File12-1024x95 La gestion des licences Office 365 par PowerShell

 

L’extraction au format csv nous donnera sous Excel les valeurs suivantes :

blog ai3 File13 La gestion des licences Office 365 par PowerShell

En attendant un prochain article, Que la force soit avec vous 😉

James MAILLET

AI3