19 May 2025, 00:00

Configurations Intune

Propriétaire

Le propriétaire d’un appareil a certaines possibilités en +, comme gérer les applications dans le Portail d’entreprise.

On peut modifier ou supprimer ce propriétaire :
Intune -> Appareils -> Tous les appareils -> choisir l'appareil -> Propriétés -> Changer (ou Supprimer) l'utilisateur principal

Si aucun propriétaire n’est affecté à un ordi, il sera considéré comme un ordi partagé.

Groupes locaux

Il est possible d’ajouter automatiquement un/des utilisateurs à un groupe local du poste sur lequel ils se connectent.
Ceci peut par exemple servir à accorder automatiquement le droit de se connecter en RDP à un poste.

Intune -> Endpoint Security -> Manage -> Account Protection  
Create Policy -> Local user group membership

On y choisit le groupe local auquel appartiendront les utilisateurs.
On y affecte les utilisateurs/groupes concernés.
Enfin, on assigne les groupes/postes sur lesquels ce paramétrage sera effectif.

Admin locaux

Il est possible d’utiliser ce mécanisme pour ajouter les utilisateurs au groupe “Administrateurs”. Ceci permet une certaine granularité dans cette affectation (choix des postes).

Mais si on souhaite qu’un utilisateur soit systématiquement admin, sur tous les postes, on peut utiliser les rôles Entra pour ça, et ajouter l’utilisateur au rôle “Microsoft Entra Joined Device Local Administrator”.

Office

intune-configs-office.html

Installation d’applications

Installs MSI

https://www.it-connect.fr/intune-comment-deployer-une-application-au-format-msi/

Télécharger le fichier MSI.
Identifier le paramètre d’installation silencieuse en lançant my-installer.msi /?.
Par exemple, pour 7zip, c’est /quiet.

Aller sur le portail Intune -> Applications -> Windows puis Créer.
Type : application métier
Choisir le fichier MSI précédemment téléchargé
Renseigner un “Nom de l’éditeur” (par exemple 7-zip)
Choisir un contexte d’installation (uniquement la session de l’utilisateur, ou bien au niveau de la machine) ; parfois cette option n’est pas dispo
“Ignorer la version de l’application” permet d’installer les applications qui se mettront à jour toutes seules (ex : Firefox, Chrome…)
On place le flag silencieux dans “Arguments de ligne de commande”

Dans l’écran suivant, on choisit les affectations souhaitées.
“Obligatoire” signifie que l’appli sera forcément installée.
“Disponible” signifie que l’appli est disponible dans le “Portail d’entreprise” pour que les utilisateurs qui le désirent puissent l’installer.
“Désinstaller” sert à forcer la désinstallation de l’appli.

Quelques (dizaines de) minutes après la validation, l’appli devrait se retrouver sur les postes.

Win32 apps

Permet de déployer tout type de programme personnalisé, notamment des .exe et des scripts.
Doit être packagé en un fichier .intunewin. Ceci se fait avec IntuneWinAppUtil.

Création du fichier .intunewin

On met tous les fichiers nécessaires dans un dossier, par exemple .\0-Input.
Il faut spécifier un fichier, qui est celui qui sera exécuté, c’est le “setup file”.
On spécifie un dossier de sortie qui stockera le fichier résultant.

\IntuneWinAppUtil.exe -c <setup_folder> -s <setup_file> -o <output_folder>

typiquement
\IntuneWinAppUtil.exe -c .\0-Input -s .\Install.ps1 -o .\1-Output

Création du déploiement

Dans le centre d’admin Intune, aller dans Apps -> Windows -> Create -> Windows apps (Win32)
Définir un nom, une description, un éditeur.

Il faut alors définir la commande à lancer. Ici, on lance un script Powershell, donc on met :
%windir%\sysnative\WindowsPowerShell\v1.0\powershell.exe -Executionpolicy Bypass .\MyScript.ps1

En commande désinstallation, on met
%windir%\sysnative\WindowsPowerShell\v1.0\powershell.exe -Executionpolicy Bypass .\Uninstall.ps1

Les règles de détection permettent au système de savoir que l’application a été installée.
Il est obligatoire d’en préciser au moins une.
En ce cas, comme on modifie le registre, on vérifie l’existence d’une ruche.
On définit le chemin à rechercher (par exemple HKEY_CURRENT_USER\SOFTWARE\0_TEST).

Scripts

Remediations

https://learn.microsoft.com/fr-fr/intune/intune-service/fundamentals/remediations

Nécessite une licence Windows Enterprise (standalone, ou incluse dans Microsoft 365 F3, E3 ou E5)

Définition automatique du domaine de connexion

Permet de n’avoir besoin de taper que “user” sur l’écran de connexion Windows, plutôt que “user@mondomaine.com”.
Note : taper uniquement “user” semble fonctionner si le profil a déjà été créé.
Mais pour une première ouverture, il faut taper l’UPN complet.

Pour éviter ça, on peut définir un domaine par défaut, qui sera appelé si on ne tape pas de “@mondomaine.com”.

Intune -> Appareils -> Configuration -> Créer -> Nouvelle stratégie
Win 10 et ultérieurs -> Modèle -> Restrictions d’appareil
Nommer la configuration
Section “Mot de passe” -> “Domaine de locataire Microsoft Entra préféré”
entrer mondomaine.com

Affecter les postes souhaités.
On peut laisser vide “Régles d’applicabilité”.

Une fois appliqué, on verra (entre autres) la clé de registre HKLM\SOFTWARE\Policies\Microsoft\AzureAdAccount et la valeur PrefferedTenantDomainName.

Si on souhaite se connecter sur le poste avec un utilisateur local, on peut utiliser la syntaxe
.\admin

RDP

Si on essaye d’accéder en RDP à un poste qui n’est pas joint à Entra, et qui n’a qu’un utilisateur local (par exemple admin), le domaine de connexion sera automatiquement ajouté au username entré, soit admin@mondomaine.com, ce qui ne fonctionnera pas. Pour éviter ceci, on peut utiliser la syntaxe
remotecomputer\admin
Mais ceci nécessite de connaître et taper le hostname du poste distant, ce qui n’est pas commode. Essayer en ce cas la syntaxe
local\admin
(voir si ça fonctionne ?)
ou .\user ?

Suppression

Selon mes tests, il suffit d’arrêter d’appliquer la stratégie, et le paramétrage finit par disparaître du poste.
Mais ce post indique quelques entrées de registre si ceci ne suffisait pas :
https://community.spiceworks.com/t/removing-preferred-aad-tenant-domain-name/933841/2

Config de Windows Hello

Windows Hello Entreprise -> Utiliser Windows Hello for business (utilisateurs)

Windows Hello Entreprise -> Utiliser Windows Hello pour les entreprises (appareils)

Windows Hello peut aussi être complètement désactivée au niveau du tenant

Afficher une liste d’utilisateurs sur l’écran de connexion

Devices -> Configuration profile
Settings Catalog
Chercher
“Enumerate local users on domain-joined computers”
L’appliquer au niveau du poste.

Map drives

Je vois 2 méthodes qui fonctionnent : l’import de modèles ADMX, et un script Powershell.

ADMX

Avec les modèles ADMX, le lecteur réseau sera créé, même si le chemin réseau est introuvable (pratique pour être sûr que le lecteur est créé, même en l’absence de connectivité vers le serveur).
Par contre, si le lecteur est déconnecté, il ne sera plus jamais connecté automatiquement ; le paramétrage s’applique une seule fois (par utilisateur par poste).

Script Powershell

Il est facile de monter un lecteur réseau via script Powershell, mais la difficulté est de le faire exécuter automatiquement, sans action de l’utilisateur.
Pour ceci, ce site génère un script qui, si il est lancé hors du contexte utilisateur (donc en user “SYSTEM”), va créer une tâche planifiée qui s’applique à tous les utilisateurs, lors de leur logon.
Ceci fonctionne très bien si la ressource partagée est accessible dès le logon.

Dans le cas où on a besoin d’un VPN pour accéder à la ressource partagée, il faut relancer la tâche planifiée après connexion du VPN.
Pour éviter aux utilisateurs de chercher les tâches planifiées, il est possible de définir un 2nd déclencheur, par exemple le verrouillage de session.
J’ai trouvé la syntaxe grâce à ce post et j’ai rajouté/modifié ce bloc dans le script :

    $stateChangeTrigger = Get-CimClass -Namespace ROOT\Microsoft\Windows\TaskScheduler -ClassName MSFT_TaskSessionStateChangeTrigger
    $onLockTrigger = New-CimInstance -CimClass $stateChangeTrigger -Property @{
        StateChange = 7  # TASK_SESSION_STATE_CHANGE_TYPE.TASK_SESSION_LOCK (taskschd.h)
    } -ClientOnly
    
    $atLogonTrigger = New-ScheduledTaskTrigger -AtLogOn
    
    $triggers = @( $atlogonTrigger, $onLockTrigger )
    
    [...]
    
    $null = Register-ScheduledTask -TaskName $schtaskName -Trigger $triggers  [...]

Pour trouver les valeurs à utiliser, on peut configurer une tâche planifiée manuellement, via la GUI, puis chercher ses détails via PS :

# On récupère la tâche dans un objet
$task = Get-ScheduledTask "MyTaskName"

# Vue très simplifiée de la tâche
$task

# Vue plus détaillée
$task | select-object *

# Vue des déclencheurs
$task.Triggers
 

PC partagé

PC partagé ->

LAPS

https://learn.microsoft.com/en-us/intune/intune-service/protect/windows-laps-overview
https://learn.microsoft.com/en-us/intune/intune-service/protect/windows-laps-policy

https://www.it-connect.fr/tuto-intune-configuration-windows-laps/

Autoriser scripts Powershell

https://www.dmtt.blog/post/set-the-powershell-execution-policy-using-an-intune-configuration-profile

Appareils -> Configuration -> Nouvel élément
Modèles d’administration -> Composants Windows -> Windows Powershell -> Turn On script execution (existe aussi en version user)

19 May 2025, 00:00

Intune

Présentation

MDM = Mobile Device Management = GPM = Gestion des Périphériques Mobiles
-> administration centralisée des appareils (façon GPO)

Centre d’administration :
https://intune.microsoft.com

https://learn.microsoft.com/en-us/windows/configuration/provisioning-packages/how-it-pros-can-use-configuration-service-providers

Choix du MDM

Plusieurs possibilités pour la gestion des appareils :

  • Intune (requiert licence Intune)
  • Basic Mobility and Security (capacité d’aministration + restreintes,mais permet d’administrer les appareils dont les users n’ont que des licences Basic ou Standard)
  • 3d party tools je suppose

Ce MDM se définit au niveau du tenant.
On peut voir le MDM actuel dans le centre d’admin Intune -> Administration de locataire -> Détails du locataire -> Autorité MDM
S’il est sur “Office 365 Mobile”, il faut le définir sur Intune.

On peut définir son MDM ici :
https://intune.microsoft.com/#view/Microsoft_Intune_Enrollment/ChooseMDMAuthorityBlade

Il apparaît alors comme Autorité MDM “Microsoft Intune”

https://learn.microsoft.com/en-us/intune/intune-service/fundamentals/mdm-authority-set

Pour que les appareils appliquent les stratégies paramétrées sur Intune, ils doivent impérativement avoir “Intune” défini en MDM !

Basic Mobility and security

Si on souhaite juste utiliser la gestion gratuite

Il faut commencer par activer la gestion des appareils :
https://learn.microsoft.com/en-US/microsoft-365/admin/basic-mobility-security/set-up?view=o365-worldwide#activatemdm

Activate Basic Mobility and Security
https://compliance.microsoft.com/basicmobilityandsecurity

Dans Entra -> Appareils, on verra le MDM défini à “Office 365 Mobile”

Licences

Nécessaires pour utiliser Intune.
Licence incluse dans les abonnements E3, 365 Business Premium (PAS Standard), entre autres.
Possible de prendre une licence autonome (Microsoft Intune Plan 1, à 7.50€/mois)

https://learn.microsoft.com/en-us/mem/intune/fundamentals/licenses

Embarquement (enrollment) des appareils

https://learn.microsoft.com/fr-fr/windows/client-management/mdm-enrollment-of-windows-devices
https://www.toutwindows.com/blogtoutwindows/intune-details-dun-enrolement-windows/

Le rôle des manipulations suivantes est de faire gérer un appareil par Intune.

Pour s’assurer qu’un appareil est bien géré par Intune, on peut vérifier que :

  • il apparaît bien dans Entra, section Appareils
  • il est mentionné avec “Intune” comme GPM
  • il apparaît dans le centre de gestion Intune

Si une des ces conditions n’est pas remplie, les configurations Intune ne s’appliqueront pas.

Comme d’hab, prévoir de patienter quelques (dizaines de) minutes pour que les changements soient reflétés sur la console d’admin web MS.

Inscription automatique

Nécessite une licence Entra ID P1 au minimum.
Contenue dans Business Premium.

https://learn.microsoft.com/fr-fr/intune/intune-service/enrollment/windows-enroll

Elle se configure soit dans Entra soit dans Intune.
Elle est définie selon les utilisateurs, et non les appareils.

Entra admin center -> Identité -> Paramètres -> Mobilité
De là, sélectionner “Intune”, et activer “Étendue de l’utilisateur Gestion des données de référence” (permet de sélectionner les utilisateurs pour lesquels sera activé l’inscription automatique Intune)
Par défaut c’est Aucun, mais on peut choisir “Tout le monde”, ou bien Partiel (une sélection de users/groupes)

C’est l’utilisateur qui fait la jonction initiale à Entra qui va définir l’enrollement automatique ou non.
Si on joint Entra avec un user SANS enrollment, puis qu’on se connecte avec un utilisateur AVEC enrollment, le poste ne sera pas joint à Intune pour autant. Il faut défaire la jonction (dsregcmd /debug /leave) puis la refaire en utilisant un utilisateur AVEC enrollment automatique.

Une fois l’enrollment réalisé, le poste reste connu d’Intune, même si les utilisateurs suivants n’ont pas d’enrollment automatique, ni même pas de licence Intune (mais en ce cas, les configurations ne seront pas appliquées).

Inscription manuelle

Pour embarquer manuellement un appareil Windows, il faut l’appli Company Portal (Portail d’Entreprise) télechargeable depuis le Store.

Il est nécessaire d’ajouter de 2 CNAME dans le DNS (enterpriseenrollment.company.com et enterpriseregistration.company.com ) pour permettre la découverte automatique des points de connexion
https://learn.microsoft.com/fr-fr/intune/intune-service/enrollment/windows-enrollment-create-cname

https://learn.microsoft.com/en-us/mem/intune/apps/store-apps-company-portal-app

Pour l’embarquement des appareils, il faudra ajouter le “Compte Professionnel ou scolaire” (ce qui enregistre l’appareil dans Entra), mais également le “Configurer pour une utilisation professionnelle”.
Une fois cette 2e étape réalisée, l’appareil sera mentionné avec le GPM “Office 365 Mobile” et apparaîtra dans Intune.
De plus, dans “Paramètres -> Comptes -> Accès Professionnel et scolaire”, il sera mentionné comme “Connecté à (nom de l’organisation)” (avec icône de serviette de travail).

Vérification/synchro

https://learn.microsoft.com/fr-fr/mem/intune/user-help/sync-your-device-manually-windows#next-steps

C’est un peu l’équivalent de “gpupdate /force”
Sous Win 10, aller dans Paramètres -> Comptes -> Accès Professionnel et Scolaire
Cliquer sur le GPM (icône de la mallette) puis Informations. On peut alors Synchroniser ou “Créer un rapport”

Sur la console d’admin intune, on peut aller dans Appareils -> Tous les appareils -> choisir le poste -> Configuration de l’appareil.
On y voit les différentes stratégies qui sont appliquées (avec succès ou erreur) sur l’appareil en question.

https://techcommunity.microsoft.com/t5/microsoft-intune/is-it-really-impossible-to-force-an-intune-sync-from-the-command/m-p/3818315

Logs

Observateur d’évenements (eventvwr.msc)
Journaux apps services -> Microsoft -> Windows -> DeviceManagement - Enterprise…

Le journal Admin donne des infos à chaque actualisation.

ADMX

Il est possible d’importer des fichiers .admx pour avoir leurs réglages disponibles dans Intune.

Il faut commencer par récupérer (ou créer) les fichier .admx en question.

Intune -> Appareils -> Gestion des appareils -> Configuration puis onglet Importer ADMX
Puis clic sur “+ Importer”
Choisir l’admx et l’adml

Il est possible que l’import échoue, notamment s’il fait référence à un autre admx absent. Par exemple, “Windows.admx” semble parfois nécessaire (notamment pour ajouter drivemapping.admx )

Une fois l’import réalisé, le fichier admw est disponible dans le même onglet “Import ADMX” , et en cliquant sur les 3 petis points au bout de la ligne, on peut le supprimer.

Utilisation

Appareils -> Stratégies -> Créer -> Nouvelle stratégie -> Modèle -> Modèles d’administration importés

Scripts

Sysnative

Windows intègre un mécanisme de redirection transparent qui fait que lorsqu’une application 32 bits demande à accéder à C:\Windows\System32, le système va en réalité écrire dans C:\Windows\SysWOW64. De même avec Program Files et Program Files (x86).
Ça permet un cloisonnement des architectures, mais ça pose un souci lorsque l’on veut qu’une application 32 bits accède au vrai répertoire System32 (typiquement pour installer un pilote).

Pour contourner ce problème, une autre redirection est mise en place : celle de C:\Windows\Sysnative vers le vrai C:\Windows\System32 .

Attention, ce lien Sysnative n’est visible que par les applications 32b ! Les applis 64b (dont l’explorer) ne le voient pas et ne peuvent pas y accéder.

Comme les scripts Intune sont exécutés dans un contexte 32b, si on souhaite accéder à System32 via ces scripts, il faut donc leur indiquer le chemin Sysnative.

https://www.samlogic.net/articles/sysnative-folder-64-bit-windows.htm
https://call4cloud.nl/sysnative-64-bit-ime-intune-syswow64-wow6432node/

Apps

https://learn.microsoft.com/en-us/intune/intune-service/fundamentals/deployment-plan-protect-apps

Pare-feu

Endpoint Security -> Manage -> Firewall
Create policy -> Plateform : Windows -> Windows Firewall rules

On ajoute ensuite des Configuration Settings.
Le nom sera le nom donné à la règle dans le pare-feu.
On choisit Allow ou BLock, puis on fait Edit instance.
Dans les paramètres, il me semble indispensable de spécifier le protocole (6 pour TCP, 17 pour UDP, 1 pour ICMP4, 58 pour ICMPv6), sans quoi on a des messages d’erreur concernant d’autres champs.

Lien MS pour des infos sur les champs

Lorsqu’on valide la règle et qu’on l’affecte à un poste, un mécanisme de push peut immédiatement déclencher une actualisation du poste (en tout cas sous Win 11 24H2).

Vérification

Sur le poste client, on va dans “Pare-feu avec fonctions avancées” -> Analyse -> Pare-feu.
On y voit toutes les règles actuellement actives.
Attention, c’est le seul endroit où on voit les règles qui viennent d’Intune ; elles n’apparaissent par dans les “règles entrantes”.

Si la règle n’apparaît pas, diagnostiquer avec l’observateur d’events, chercher l’event 404 dans le journal Admin (voir ci-dessus pour le chemin).

19 May 2025, 00:00

Sharepoint et Onedrive

Sharepoint Admin Center

Dans l’admin M365, il y a “All admin centers” dans la colonne de gauche.
Parmi ceux-ci, on trouve celui de Sharepoint.
Ça devrait être https://mycompany-admin.sharepoint.com

Powershell

Il semble y avoir plusieurs modules PS pour SPO, pas tous compatibles avec les mêmes versions de Powershell.

Module PnP.Powershell

Semble fournir plein de commandes pour gérer O365.
Nécessite Powershell 7, installable côte-à-côte de Powershell 5.1. Pour l’installer :
iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI"
puis
Install-Module -Name PnP.PowerShell
Load-Module PnP.PowerShell

Module Microsoft.Online.SharePoint.PowerShell

https://www.sharepointdiary.com/2019/02/the-term-connect-sposervice-is-not-recognized-as-the-name-of-a-cmdlet-function-script-file-or-operable-program.html

Nécessite Powershell 5.
C’est lui qui fournit les commandes Connect-SPOService, Set-SPOSite etc.

Install-Module Microsoft.Online.SharePoint.PowerShell
Import-Module Microsoft.Online.SharePoint.PowerShell

Pour l’utiliser dans PS7 :
Import-Module Microsoft.Online.SharePoint.PowerShell -UseWindowsPowerShell

Sites

Toutes les ressources d’un site sont accessibles par tous les membres de l’équipe.
(ou pas avec des permissions sur les biblios ? )

Format d’une adresse de site SPO :
https://mycompany.sharepoint.com/sites/my-site

Modifier informations

Aller sur le site -> Engrenage en haut à droite -> Site Information
On peut y changer le nom et la description.

Attention, changer le nom ne change pas l’URL ! Pour la changer, il faut aller dans le centre d’admin -> Active sites
https://learn.microsoft.com/en-us/sharepoint/change-site-address

Sharepoint Designer

Permet de modifier le contenu et les réglages des sites Sharepoint.
Fonctionne avec SharePoint Online si on fait quelques réglages sur SPO.

https://answers.microsoft.com/fr-fr/msoffice/forum/all/sharepoint-designer-et-sharepoint-on-line/8df94e29-8a8c-4593-a9a6-ffc8f13b042b
https://www.sharepointdiary.com/2018/09/sharepoint-online-enable-sharepoint-designer-using-powershell.html

Télécharger Sharepoint Designer :
https://www.microsoft.com/fr-fr/download/details.aspx?id=35491
et le SP1 :
https://www.microsoft.com/fr-fr/download/details.aspx?id=42009
Installer les 2.

Il faut activer la modification de SPO par Sharepoint Designer (c’est-à-dire les scripts customs). On peut le faire par l’interface, mais cela peut mettre jusqu’à 24h à être pris en compte, et c’est pour l’ensemble des sites.
On eut aussi le faire en Powershell, c’est instantané et avec une granularité par site. Pour ceci :

$tenantname = "mycompany"
$sitename = "my-site"
$AdminSiteURL="https://$tenantname-admin.sharepoint.com"
$SiteURL="https://$tenantname.sharepoint.com/sites/$sitename"
$cred = Get-Credential

#Connect to SharePoint Online Admin Center
Connect-SPOService -Url $AdminSiteURL -Credential ($cred)

#Enable SharePoint Designer for the site collection
Set-SPOSite -Identity $SiteURL -DenyAddAndCustomizePages $False

Après cette manip, si on va sur le site -> Settings -> Site information -> View all site settings
est apparu
Site collection Administration -> SharePoint Designer Settings
Si on l’ouvre, on peut cocher “Enable Sharepoint Designer”.

Dans Sharepoint Designer, on fait “Open site” et on entre l’URL du site (company.sharepoint.com/sites/mysite).
Après identification, ça devrait être ok.

Bibliothèques (Library)

Les bibliothèques peuvent avoir plusieurs noms d’affichage, dépendant de la langue ! Sharepoint a en effet un système de “traduction” depuis la langue principale.

Pour connaître la langue principale d’un site, il faut ouvrir le site puis
Settings -> Site information -> View all site settings -> Language settings.

Pour changer le nom d’affichage d’une bibliothèque, il faut l’ouvrir dans la langue souhaitée (par exemple avec l’extension “Language Switch”) puis :
ouvrir biblio -> Settings (engrenage) -> Library settings -> List name, description and navigation
Ainsi, le nom de cette bibliothèque aura changé uniquement dans la langue en question.

Ce paramétrage ne change pas l’URL. Sa valeur équivaut au “InternalName”, et elle ne peut être changée que par Powershell ou Sharepoint Designer.

Changer l’URL par SP Designer

Connecter SP Designer comme indiqué ci-dessus.
Aller dans “All Files” (et PAS dans “Lists and Libraries”)
puis faire un clic-droit sur la biblio et “Rename”
Ceci changera son chemin d’accès (mais pas son nom d’affichage)

À noter que lors de l’affichage de “All Files”, la biblio a un attribut “Title” qui correspond à son nom d’affichage dans la langue principale.
Si on change le nom d’affichage dans la langue principale, l’attribut “Title” sera mis à jour en conséquence.

Si on ouvre Lists and Libraries, on voit apparaître la biblio sous son nom anglais (car SPD est en anglais je suppose).
Si on ouvre les propriétés de la biblio, on peut changer le “Name”, mais ceci ne changera que le nom d’affichage en anglais !

Stockage

stockage : 1To inclus + 10Go/user
20cts/Go supplémentaire

https://learn.microsoft.com/en-us/microsoft-365/commerce/add-storage-space

Office 365 Extra File Storage

Pour voir l’espace disponible/utilisé, aller dans Sharepoint Admin -> Active sites.

https://learn.microsoft.com/en-us/troubleshoot/sharepoint/administration/out-of-storage

Changer URL sharepoint

Si on veut changer le nom de domaine sharepoint

https://learn.microsoft.com/en-us/sharepoint/change-your-sharepoint-domain-name

Voir dans l’explorateur

https://learn.microsoft.com/en-us/sharepoint/sharepoint-view-in-edge

Connect-SPOService -Url https://contoso-admin.sharepoint.com  
Set-SPOTenant -ViewInFileExplorerEnabled $True

Migration

SPO admin center -> Migration

Onedrive

Pour synchroniser une biblio Sharepoint avec Onedrive, il y a 2 possibilités :

  • “sync”
  • ajouter un raccourci dans son Onedrive perso

Pour différentes raisons, l’option de placer un raccourci vers la biblio est aujourd’hui sensiblement + conseillée que l’option de Sync.
Elle doit toutefois être réalisée individuellement par chaque personne qui doit accéder à la biblio ; elle ne peut pas être déployée automatiquement.

https://learn.microsoft.com/en-us/sharepoint/sync-health?tabs=windows

Config de Onedrive par GPO

https://learn.microsoft.com/en-us/sharepoint/use-group-policy

Auto sync avec Sharepoint

https://learn.microsoft.com/en-us/sharepoint/use-group-policy#configure-team-site-libraries-to-sync-automatically

La valeur à déployer est de la forme :
tenantId=xxx&siteId=xxx&webId=xxx&listId=xxx&webUrl=httpsxxx&version=1

Nécessite de trouver l’ID de la bibliothèque à synchroniser automatiquement.
Pour ça, aller sur le site (pas l’admin), ouvrir la biblio, clic syr le bouton “Sync” puis “Copy library ID”.
On peut ensuite directement coller cette URL dans la valeur de la GPO.

Attention, ce paramétrage peut mettre jusqu’à 8h pour se déclencher.
Possible de forcer avec
TimerAutomount

Gestion de l’espace

https://betterlicenses.com/blog/sharepoint-online-storage-quota-problem-fixing-it
https://learn.microsoft.com/en-us/sharepoint/trim-versions

Limitations

https://support.microsoft.com/en-au/office/restrictions-and-limitations-in-onedrive-and-sharepoint-64883a5d-228e-48f5-b3d2-eb39e07630fa

Dossier perso

http://mycompany-my.sharepoint.com/
renvoie sur son dossier Onedrive personnel (lié au compte pro, pas un vrai onedrive perso)

14 May 2025, 00:00

W11 et comptes MS

Compte créé en tant que compte local

Supposons que le compte utilisé soit un compte local, que l’on appellera “admin”.
En ce cas :

  • whoami donner hostname\admin

Les paramètres mentionneront “Compte local” en haut à gauche.
L’appareil apparaît dans la liste des appareils sur :
https://account.microsoft.com/devices

Si on va dans Paramètres -> Comptes, des infos sur le stockage cloud etc. sont affichées
Si on va dans Paramètres -> Comptes -> E-mail et comptes, on voit le compte mentionné comme “Compte Microsoft” et on ne peut pas le supprimer, on ne peut que le “Gérer” (ce qui ouvre le site web de MS)

Les applis MS sont connectées automatiquement

Compte créé via un compte MS perso

Si dès la création du compte, on se connecte avec un compte MS
Le username est hostname\abcde avec abcde qui sont les 5 premières lettres du mail associé au compte MS

Les paramètres mentionnent l’adresse mail en haut à gauche.

Déconnexion

Compte perso

Aller dans les Paramètres -> Comptes -> Vos informations
et choisir “Se connecter plutôt avec un compte local”

Une fois déconnecté, le compte Windows devient effectivement un compte local, mais les informations de connexion sont toujours enregistrées. Ainsi, même après déconnexion de Teams, il suffit de sélectionner le compte dans la liste pour l’ouvrir à nouveau, sans besoin de taper le mot de passe.

Ceci est dû au fait qu’après suppression du compte MS, le compte reste dans les Paramètres -> Comptes -> E-mail et comptes
Mais en déroulant ses infos, on peut ici le supprimer. Ainsi, toute re-connexion à ce compte nécessitera le mot de passe.

Compte pro/scolaire

Paramètres -> Comptes -> Accès professionnel ou scolaire

14 Apr 2025, 00:00

Btrfs

https://archive.kernel.org/oldwiki/btrfs.wiki.kernel.org/index.php/Main_Page.html

Installation

sudo apt install btrfs-progs

mkfs.btrfs /dev/sdX1

taille metadata ?

sudo btrfs subvolume list /media/BTRFS

sudo btrfs subvolume get-default /media/BTRFS

inodes

inodes identiques au sein de différents subvolumes : possible (car b-tree différent)

https://mpdesouza.com/blog/btrfs-for-mere-mortals-inode-allocation/

14 Apr 2025, 00:00

Tester les I/O sous Linux avec fio

sudo apt install fio

Liens :
https://fio.readthedocs.io/en/latest/fio_doc.html
https://linux.die.net/man/1/fio
https://askubuntu.com/questions/87035/how-to-check-hard-disk-performance
https://arstechnica.com/gadgets/2020/02/how-fast-are-your-disks-find-out-the-open-source-way-with-fio/
https://www.virtono.com/community/tutorial-how-to/fio-basics/

Paramètres obligatoires :
--name : le nom du job
--size : la taille du fichier s’il n’existe pas déjà

Par défaut, c’est un test en lecture seule sur un fichier de 4G.

Autres paramètres :

--filename : le fichier (ou bloc ! ) sur lequel sera réalisé le test ; par défaut, c’est ./${jobname} (la valeur de –name) si un seul job, ou jobname.jobnumber.filenumber si plusieurs jobs
--filename_format : permet de personnaliser la génération de filename

--readonly pour de la lecture seule
--readwrite (ou –rw) : définit le type d’opération : read (séquentiel) , write (séquentiel) , randread (aléatoire) , randwrite (aléatoire) , rw (50/50 séquentiel) , randrw (50/50 aléatoire)
--opendir : ouvre séquentiellement tous les fichiers sous le répertoire passé en argument

--io_size : définit la quantité de données à traiter avant d’arrêter fio. Par défaut c’est équivalent à size, mais peut être différent (par exemple pour lire uniquement 5G de données malgré une taille de fichier de 20G, ou à l’inverse lire un total de 10G malgré une taile de fichier de 500m)
--blocksize : par défaut 4096
--ioengine : le moteur d’I/O à utiliser ; par défaut psync ; voir les descriptions ; beaucoup d’exemples semblent utiliser libaio
--fsync= : pour forcer une sync (écriture réelle sur le périphérique) après X écritures
--end_fsync=1 : pour que le timer continue jusqu’à ce que l’OS rapporte que les écritures ont réellement été réalisées
--direct : force la non-utilisation d’un buffer disque ; recommandé de toujours mettre 1 (true)
–refill-buffers : pour forcer le renouvellement des données aléatoires utilisées pour le test (

--gtod_reduce=1 : semble réduire les requêtes pour connaître l’heure et améliorer les perfs
--eta-newline : force l’affichage d’une nouvelle ligne après X secondes

En cas de lecture seule, le fichier de test doit être au moins aussi gros que la taille de blocs par défaut (soit 4K).

Job files

Syntaxe

; -- start job file --
[global]
rw=randread
size=128m

[job1]

[job2]

; -- end job file --

Chaque jobfile peut contenir 1 ou plusieurs jobs. Si plusieurs présents, il sont parallélisés.
On peut éviter cette parallélisation avec l’option stonewall (ou wait_for_previous) : un job qui possède cette option attendra la fin du/des jobs précédents avant de démarrer. Ce job (et les suivants) feront aussi partie d’un nouveau groupe de rapport.

Chaque job peut également paralléliser des IO (via iodepth ou numjobs).
On peut également fournir plusieurs jobfiles en ligne de commandes, et ils seront exécutés à la suite.

–section
possible de mettre des variables

Utilisation

Pour tester un disque en tant que bloc :
fio --filename=/dev/sdX ./jobfile.txt
Pour écrire le log dans un fichier :
fio --filename=/dev/sdX --output=mydisk.log ./jobfile.txt

Output

https://fio.readthedocs.io/en/latest/fio_doc.html#interpreting-the-output

Au début, le nom de tous les jobs qui seront lancés, avec leurs options.

seqread: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
randread: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
randwrite: (g=1): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1

g= : leur groupe d’appartenance (je suppose) ; (R) (W) (T) : read write trim

Pendant le test, Une ligne de type :
Jobs: 1 (f=1): [_(1),r(1),P(1)][45.4%][r=20.9MiB/s][r=5350 IOPS][eta 00m:53s]
Jobs: 1 (f=1) : le nombre jobs en cours dans le groupe (f=nombre de fichiers ouverts)
[_(1),r(1),P(1)] : l’état de l’ensemble des jobs prévus ; voir table dans la doc pour + de détails ;
les principaux états : _ = correctement fini ; rwmdRWMD : read/write/mixed/trim (MAJ=seq,min=rand) ;
P = job planifié pour plus tard ; X = erreurs ; K = interrompu
Puis pour chaque test (ou groupe si group_reporting) :

  • des infos test1: (groupid=0, jobs=1): err= 0: pid=1519610: Sun Feb 25 11:25:53 2024
  • des valeurs de latences (slat = submission latency, clat = completion latency, lat = total latency)
  • des valeurs de bande passante et d’IOPS
  • statistiques sur la latence, les IOPS, la bande passante etc

14 Apr 2025, 00:00

ZFS

https://arstechnica.com/information-technology/2020/05/zfs-101-understanding-zfs-storage-and-performance/
https://unixdigest.com/articles/battle-testing-zfs-btrfs-and-mdadm-dm.html
https://openzfs.org/wiki/Newcomers
https://openzfs.github.io/openzfs-docs/Project%20and%20Community/FAQ.html

Généralités

ZFS est une architecture qui combine des fonctionnalités de gestion de volumes, et de système de fichiers.

Recommandé de conserver au moins ~10% d’espace libre (ou 500Go, le + petit des 2 devrait être ok) dans le pool pour éviter de sérieusement dégrader les performances.

Architecture

Le plus gros ensemble sous ZFS s’appelle un zpool. Il est constitué de 1 ou plusieurs vdevs, chaque vdev étant constitué d'1 ou plusieurs périphérique (disque physique, ou éventuellement fichier).

Une fois crée, le zpool peut directement être monté en tant que système de fichier, mais il est aussi possible d’y créer des dataset, qui peuvent eux-même être montés.
On peut aussi créer un dataset enfant sous un dataset parent, avec la possibilité d’hériter des propriétés du parent.

On peut également créer des volumes au sein d’un zpool, qui pourra être accédé comme un périphérique bloc : il sera possible de le formater avec un autre FS (par exemple ext4).

zpool

C’est un ensemble logique complet pouvant être utilisé avec ZFS. Il est constitué de 1 ou plusieurs vdev.
Au sein d’un zpool, les données sont réparties entre les différents vdev de stockage (ou de support).

Il n’y a pas de redondance au sein d’un zpool : si un seul vdev vient à manquer, l’ensemble du zpool est perdu !

C’est au sein de chaque vdev que l’on va s’assurer d’une redondance si nécessaire.

Le zpool contient directement un dataset, qui peut être monté. Il est aussi possible d’y créer des dataset enfants et sous-enfants.
Il y a un héritage des propriétés (qui peut être modifié).

vdev

Un vdev représente une unité de stockage, au sein du zpool.
Il y’a plusieurs types de vdev, etre autres :

  • ceux de stockage, qui peuvent être en simple disque, en mirror (équivalent RAID1), en RAIDZ (équivalent RAID5-6)
  • ceux de support :
  • CACHE
  • LOG
  • SPECIAL

device

dataset

snapshot

clone

Install

Recommandé de l’installer depuis les backports Besoin de la section contrib

sudo apt install -t stable-backports zfsutils-linux zfs-dkms

Commande zpool

Permet de gérér les pools et les vdev.
Les vdev sans chemin absolu sont cherchés dans /dev/

Création d’une pool

man zpool create

De la forme

poolname = "myzpool"
sudo zpool create -m mountpoint $poolname dev1 dev2 [redundancy] dev3 dev4 [redundancy] dev5 dev6 dev7

On peut spécifier une nature de redondance pour chaque vdev, puis on spécifie les devices (ou fichiers) qui entreront dans ce vdev.
Dans le cas ci-dessus, nous aurons 4 vdev : dev1, dev2, une redondance entre dev3 et dev4, et une redondance entre dev5 et dev6.
Nous aurons probalement un message d’erreur nous informant que la redondance n’est pas régulière entre les différents vdev.

La redondance peut prendre entre autres ce valeurs : mirror raidz1 raidz2, raidz3.

Cas simple : un seul périphérique :
sudo zpool create $poolname /dev/disk/by-id/ata-XXX

Note il est conseillé de choisir une méthode + fiable que /dev/sdX pour définir les vdev, car en cas de changement de lettre, il faudra supprimer le fichier /etc/zfs/zpool.cache (ou exporter la pool) puis réimporter la pool.

ashift

Lister les pools

zpool status
Les chiffres READ WRITE et CKSUM comptent le nombre d’erreurs de chaque catégorie sur chaque vdev.

Sortir les données en json :
zpool status -j | jq
donne beaucoup d’infos détaillés sur chaque composant.

man zpool status
Beaucoup d’options intéressantes
-s : pour identifier les vdev lents

zpool list -v -P
Permet de voir l’usage disque de chaque pool et même de chaque vdev.

Santé et remplacement d’un RAIDZ-2

Dans cet exemple, j’ai un pool constitué d’un seul vdev, lui-même constitué de 8 fichiers en RAIDZ-2 (+ facile pour tester).
J’ai volontairement corrompu ce vdev en supprimant 2 fichiers.

Lorsque l’on liste les pools et les vdev, le pool ainsi que le vdev se trouvent dans l’état DEGRADED. Chacun des 2 devices (en l’occurence fichiers) se trouve dans l’état FAULTED.
FAULTED signifie que le device sous-jacent est toujours pris en compte dans le vdev, mais inaccessible ou défectueux (par exemple disque en panne, ou débranché, ou fichier supprimé).

Il y a aussi l’état OFFLINE, qui signifie que le device sous-jacent a été sorti du vdev, qui est en attente d’un remplacement pour ce device.
On peut volontairement passer un device en OFFLINE avec la commande :
sudo zpool offline $poolname device

Lorsqu’un device est sain (“ONLINE”), son nom/chemin est indiqué dans la sortie de zpool status ou zpool list -v -P.
Lorsqu’un device est absent (FAULTED ou OFFLINE), ce sera son GUID qui sera indiqué.
On peut obtenir les GUID de tous les device, même les sains, avec zpool list -v -P -g.

Pour remplacer une disque/fichier offline ou faulted :

sudo zpool replace $poolname $oldGUID /dev/sdX
sudo zpool replace $poolname $oldGUID ./file.dat

Ça devrait automatiquement lancer un resilvering. Pendant ce temps, un device replacing-1 apparaît dans le vdev, qui a lui-même son propre GUID et est composé de l’ancien et du nouveau device.

Il peut y avoir l’erreur cannot replace OLD_GUID with sdX: sdX is busy
J’ai eu ça en essayant de réajouter un disque qui avait déjà fait partie du pool. Même après wipefs -af sur les partitions puis sur la table de partition, le disque restait “busy”.
J’ai résolu l’erreur en réinitialisant le SSD comme ceci
Je suppose qu’en écrivant l’ensemble du SSD avec des 0 ça peut foncitonner aussi.

zpool attach / detach

zpool attach $poolname device new_device
permet d’ajouter un disque/fichier à un device.
S’il s’agit d’un miroir ou directement d’un disque, le disque sera ajouté en tant que miroir.

S’il s’agit d’un RAIDZ, le RAIDZ est agrandi en prenant en compte le nouveau disque, et en conservant son niveau fonctionnel (un raidz2 reste un raidz2, mais avec 1 disque en plus.
Pour ça, l’ensemble des données est réécrite sur le raidz

sudo zpool detach $poolname device

Permet de supprimer un disque d’un miroir ou d’un “replacing-X”.

Pool suspendu

Si un vdev vient à manquer, le pool est suspendu.
S’il est encore disponible (par exemple un disque qui a été déconnecté mais qui fonctionne correctement), il devrait de le rebrancher, puis d’entrer la commande
sudo zpool clean $poolname
ça devrait “resynchroniser” le pool, et remettre le compteur d’erreurs à 0 partout.

Dans mon expérience, même en déconnectant un disque en plein milieu d’une copie de fichier vers le pool, si on le reconnecte et que l’on cleane, le transfert se finit correctement et le fichier ne sera pas corrompu.
À condition que le chemin du device soit le même que précédemment ! D’où l’intérêt d’utiliser des chemins fixes (by-id).

Si le vdev est définitivement perdu, il ne sera pas possible de récupérer les données du pool.

Lister les propriétés d’une pool

zpool get all $poolname
ou plus finement
zpool get property1,property2 $poolname

Ajouter un vdev à une pool

zpool add $poolname device

Détacher une pool

sudo zpool export $poolname

Trouver et importer des pools inactives

sudo zpool import
va lister les pools détectés
Par défaut, ça va chercher sur les périphériques dispos dans /dev/. Les informations concernant l’appartenance à un pool sont trouvées dans la table de partition du périphérique.

On peut spécifier un dossier ou device à chercher avec l’option -d. Nécessaire pour importer un pool créé sur des fichiers.

sudo zpool import $poolname [newpoolname]
Permet de la rendre disponible, éventuellement en changeant son nom.

Commande zfs

Monter un dataset

zfs mount $poolname
va monter dans le chemin défini dans la propriété mountpoint

Lister les montages ZFS

zfs mount

Lister les propriétés des datasets

zfs get all [mydataset]
ou + finement
zfs get property1,property2 [mydataset]

Les propriétés dont la source est “default” sont définies à la volée, selon les valeurs par défaut (par exemple, le mountpoint sera /datasetname).
Les propriétés définies explicitement sur le dataset auront comme source “local”, et font partie intégrante du dataset, mêem si celui-ci est branché sur une autre machine.

zfs list
man zfs list
zfs list -t all -r

Définir des propriétés des datasets

sudo zfs set property=value mydataset

ARC

RAIDZ

Le RAIDZ est un système de parité analogue au RAID (bien que fonctionnant différemment).
Le RAIDZ-1 contient 1 disque de parité (analogue au RAID5). Le RAIDZ-2 contient 2 disques de parité (analogue au RAID6).
Il existe aussi le RAIDS-3 avec 3 disque de parité.

ZFS peut aussi fonctionner en mode miroir (analogue au RAID1), mais il ne me semble pas que cette fonctionnalité soit appelée “RAIDZ”.

Deduplication

Permet d’économiser de l’espace de stockage lorsque l’on stocke plusieurs fois des blocs de données identiques.
Nécessiter beaucoup de ressources : beaucoup de RAM, et il est conseillé d’avoir des SSD dédiés pour stocker la table de dédup (DDT).
Globalement il n’est pas conseillé de l’activer, sauf cas spécifiquement adapté.

scrub :

Gérer Mémoire mac allouée : AFS peut être gourmand en RAM

CoW et VMs Le CoW crée une légère baisse de perf, qui peut vraiment s’amplifier pour des fichiers avec des écritures fréquentes, comme les VMs ou les BDD voir pour désacitver CoW pour certains fihiers/dossiers/volumes ?

20 Dec 2024, 00:00

Notes sur Azure

Portail Azure

https://portal.azure.com

La colonne de gauche inclut Accueil, Tableau de bord et Tous les services.
Ensuite viennent les services favoris. On peut supprimer ces favoris dans “Tous les services -> Favoris”.
On peut ajouter des services aux favoris dans “Tous les services -> Tout” (ou Récent) en cochant l’étoile.

Facturation

L’organisation de la facturation dépend du type de contrat. Par exemple :
Microsoft Online Services Program
Enterprise Agreement
Microsoft Customer Agreement
etc…

Pour voir le type de contrat :

Portail Azure -> Cost Management + billing -> Billing Scopes
Le type de contrat est listé pour chaque billing scope (étendue de facturation)

https://learn.microsoft.com/en-us/azure/cost-management-billing/manage/view-all-accounts

MCA

Le point de départ est le compte de facturation (billing account). C’est ici qu’est conclu le contrat de licence (MCA).
Un compte contient 1 ou plusieurs profils de facturation.

Chaque profil (Billing Profile) correspond à une facture. Il comprend notamment :

  • des informations de paiement (numéro CB)
  • 1 ou plusieurs sections de facturation (invoice section)

Un profil doit avoir un plan Azure pour utiliser des ressources Azure.
Si pas de plan Azure dans le profil, il sera impossible d’y créer un abonnement (subscription) Azure. Le plan est visible dans les Propriétés du profil de facturation.
Lorsque l’on crée un profil de facturation via Azure, il me semble que ça crée automatiquement un plan Azure (probablement Pas-as-you-go ?).
Pour ajouter un plan Azure à un profil pré-existant qui n’en a pas, essayer avec cette URL :
https://portal.azure.com/?createAzurePlan=true#view/Microsoft_Azure_SubscriptionManagement/SubscriptionCreateBlade

Chaque section de facturation contient 1 ou plusieurs “Subscriptions” (abonnements) et/ou autres produits d’azure marketplace

On peut facilement transférer une abonnement vers une autre section de facturation au sein du même profil.
Pour ceci, il faut rentrer dans l’aperçu (Overview) d’un abonnement en passant par le menu “All billing subscriptions”. Si on passe par le menu “Azure subscriptions” l’option ne sera pas disponible.
Une fois ouvert l’aperçu, on a, dans le menu en haut, l’option “Change -> Invoice section” qui permet de choisir une autre section de facturation au sein du même profil.

Un abonnement contient des groupes de ressources ;
qui contiennent eux-mêmes des ressources.

Le nom du “billing profile” sera visible sur la facture.
Les noms des “invoice sections” seront visible également

Il me semble que le nom du “billing account” n’est pas visible sur la facture.

On peut prendre un abonnement de support ; sinon, seulement un support pour la facturation mais pas de support technique.

Groupe de ressources

Un Groupe de ressources est un conteneur “logique” qui a pour but de réunir toutes le ressources qui peuvent être utilisées par un “projet”, une “solution”. Par exemple des VMs, du stockage, etc.

À la création, on l’associe à un abonnement, qui sera utilisé pour la facturation. On lui donne un nom, et on choisit sa localisation géographique.
On peut ensuite lui donner des “étiquettes”, avec chacune une valeur, qui sont des catégories.

Entra

Voir https://memo.raphaelguetta.fr/post/azure-entra

Azure files

Voir https://memo.raphaelguetta.fr/post/azure-files

GPO

Pour faire littéralement des GPO, il faut nécessairement un serveur virtuel !

https://learn.microsoft.com/fr-fr/entra/identity/domain-services/manage-group-policy

Sinon nous pouvons ne pas avoir de DC, et gérer les appareils avec Intune (endpoint manager ; Mobile Device management, soit MDM)
https://memo.raphaelguetta.fr/post/azure-intune

RBAC

Role-based Access Control
https://learn.microsoft.com/en-us/azure/role-based-access-control/overview
Un rôle contient 3 éléments :

  • le “security principal”, l’élement concerné par l’attribution de rôle (user/group/service principal/managed identity)
  • la définition de rôle, qui est un ensemble de permissions (R/W/delete/mofify/grant etc)
  • l’étendue (scope), qui définit l’ensemble de resosurces auxquelles s’applique ce rôle (groupe de gestion/abonnement/groupe de ressource/ressource)

L’assignation d’un rôle (role assignment) est l’action d’attacher une définition de rôle à un security principal .

ABAC

Attribute-based Access Control
https://learn.microsoft.com/en-us/azure/role-based-access-control/conditions-overview

10 Dec 2024, 00:00

Déployer des imprimantes via Intune

https://call4cloud.nl/deploy-printer-drivers-intune-win32app/
https://www.microcloud.nl/intune-local-ip-printer-deployment/

L’idée générale est de prendre un poste vierge, d’installer la/les imprimantes dessus, et d’exporter les imprimantes.
Il y’a plusieurs méthodes pour ça.
Je me penche pour l’instant sur printBrm.

PrintBRM

Cet outil exporte l’ensemble des imprimantes, ports et pilotes du poste actuel, dans un fichier .printerExport , et les restaure d’un bloc également.
C’est simple, mais peu souple.
Il faut bien avoir noté le nom du port et de l’imprimante, pour les désinstaller correctement via le script de desinstall.

Attention, il n’est pas dans le PATH, donc il faut indiquer son chemin complet :
C:\Windows\System32\spool\tools\printBrm.exe

Création de l’export

On peut utiliser un poste tout fraichement installé, sur lequel on installe les imprimantes à déployer.
On exporte l’ensemble du système d’impression, en GUI :
printmanagement.msc

Sous “Serveurs d’impression”, clic-droit sur “hostname (local)” -> “Exporter les imprimantes vers un fichier”
Cela va créer un fichier .printerExport.

On peut aussi faire l’export en CLI plutôt que de passer par la GUI :
C:\Windows\System32\spool\tools\printBrm.exe /B /F my-export.printerExport

Vérification de l’export et import manuel

Pour inspecter le fichier :
C:\Windows\System32\spool\tools\printBrm.exe /Q /F my-printers.printerExport

Pour le restaurer :
C:\Windows\System32\spool\tools\printBrm.exe /R /F my-printers.printerExport

Attention à ne PAS mentionner .\ avant le fichier .printerexport, sans quoi on a un “File not found”.
Il faut mettre soit juste le nom de fichier s’il est dans le même dossier, soit le chemin complet.

Création du script d’installation

c:\windows\Sysnative\spool\tools\printbrm.exe /R /F my-printers.printerExport

Script de désinstallation

$printername = "Imprimante Bureau"
$portname = "PortImprBureau"

Remove-Printer "$printername"
sleep 5
Remove-PrinterPort -Name "$portname"

Commands

Install :
powershell -executionpolicy Bypass .\deploy-printer.ps1

Uninstall :
powershell -executionpolicy Bypass .\remove-printer.ps1

Détection de l’installation

Présence de la clé de registre :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\PRINTER NAME
Clé Name
Valeur : PRINTER NAME

Exporter les préférences d’impression

Les manipulations précédentes permettent d’exporter/importer les imprimantes, les ports et les pilotes, mais pas les paramètres d’impression !

10 Dec 2024, 00:00

Gestion des appareils avec Entra (jonction et jonction-hybride)

Jonction avec Entra

Les appareils peuvent être enregistrés (Entra registered), joints (Entra joined) ou en jonction hybride (Entra hybrid-joined).

https://www.it-connect.fr/inscription-machines-entra-id-registered-joined-hybrid-joined/
https://learn.microsoft.com/en-us/entra/identity/devices/faq
https://learn.microsoft.com/en-us/entra/identity/devices/manage-stale-devices

Registered

https://learn.microsoft.com/en-us/entra/identity/devices/concept-device-registration

Si on ajoute un “Compte professionnel ou scolaire”, même sur un appareil perso, alors l’appareil apparaît dans Entra en tant que Registered. Il reste la “propriété” du son propriétaire de base.
Dans Entra ID, on voit la personne qui a ajouté le Compte pro ou scolaire. Si cette personne est supprimée d’Entra ID, le propriétaire sera défini à Aucun.

Si on supprime le “Compte professionnel” des paramètres de Windows, l’appareil disparaît d’Entra.

Lors du 1er lancement d’Office, si on refuse la gestion de l’appareil par la société (“Non, se connecter à cette application uniquement”), l’appareil n’apparait pas dans Entra, et le compte n’est pas référencé dans Accès pro ou scolaire.
Si on accepte la gestion, ça ajoute le compte pro/scolaire et inscrit l’appareil dans Entra.

Entra-joined

https://learn.microsoft.com/en-us/entra/identity/devices/concept-directory-join

L’appareil appartient à l’organisation, et est joint à Entra ID par un admin de l’organisation.
L’architecture administrative est complètement sur le cloud.
Ce mode permet l’accès aux ressources cloud, ainsi que locales.
Le paramétrage des appareils se fait avec un MDM, comme Intune.
Il faut Win Pro ou + (ou Server 2019+).

Pour joindre l’appareil à Entra, il faut aller dans “Compte professionnel ou scolaire”, puis au lieu de rentrer l’adresse mail, il faut sélectionner la proposition, en bas de la fenêtre (sous “Actions alternatives”), “Joindre cet appareil à Microsoft Entra ID”
(si cette proposition n’apparaît pas, c’est probablement un Windows Famille, ou alors l’ordi est déconnecté d’internet)

Le choix du compte qui établit la jonction définit si le poste est automatiquement inscrit dans Intune, ou non (par le réglage d’inscription d’Intune).

Il est impossible d’avoir un appareil qui soit Entra-joined et joint à un domaine ! L’application d’un mode de connexion empêche l’application du second (on aura un message d’erreur si on essaye). Pour avoir cette configuration, il faut faire une jonction hybride.

Entra hybrid-joined

Ce sont les appareils qui sont joints au domaine local, et également “joints” à Entra ID.
le point de départ est la connexion au domaine local. Puis ce domaine doit être configuré pour permettre une jonction hybride (plusieurs méthodes possibles).
Une fois ceci fait, les postes concernés récupéreront automatiquement la connexion à Entra ID.

https://memo.raphaelguetta.fr/post/entra-hybrid-joined

dsregcmd

La commande dsregcmd permet de diagnostiquer le statut et les problèmes de connexion à Entra ID.

On peut ajouter le flag /debug à chaque paramètre pour avoir plus d’infos.

Le flag /forcerecovery force à se reconnecter.

dsregcmd /status permet de voir le statut de connexion actuel de l’appareil. Un article chez MS donne des informations sur chacun des champs, mais j’en liste ici quelques-uns qui me semblent importants.

Sous"Device State", tout en haut :

  • AzureAdJoined permet de dire s’il est joint à Entra (si YES, il sera donc joined ou hybrid-joined)
  • EnterpriseJoined correspond à Workplace Joined, je n’explore pas cette possibilité
  • DomainJoined correspond à un domaine local (si YES, il sera donc joint uniquement au domaine, ou bien hybrid-joined)

Sous"User State" :

  • NgcSet correspond à l’utilisation de Windows Hello
  • WorkplaceJoined correspond à la présence d’un Compte Professionnel ou scolaire (et le nombre est en dessous, WorkAccountCount)

Sous “Device Details”, on peut trouver l’ID de l’appareil, que l’on retrouvera dans Entra ID (sous ID de l’appareil, et non ID de l’objet).
“Device Details” n’apparaît que si l’appareil est (hybrid-)joint à Entra.
“DeviceAuthStatus” doit être à SUCCESS, sinon c’est qu’il y a un problème au niveau de son enregistrement sur Entra ID.

Sous “Tenant Details”, on voit les détails du tenant Entra (notamment son ID, que l’on retrouve sur la page d’accueil d’Entra).
On y voit aussi MdmUrl, à voir si c’est utile pour la confguration d’Intune ?

Défaire la jonction

Paramètres -> Comptes -> Accès professionnel ou scolaire -> Connecté par xx@xx -> Déconnecter
Ça exige d’avoir un compte admin local auquel on peut se connecter.

On peut aussi défaire la jonction en invite de commande en admin :
dsregcmd /debug /leave
Attention, il n’y a pas de garde-fou, il faut avoir accès à un compte hors de l’organisation pour ouvrir une session après le redémarrage !
Si il n’y avait pas de compte admin, un identifiant de l’organisation sera proposé au redémarrage, sans possibilité de changer, et le mot de passe ne fonctionnera pas.
En ce cas, on peut essayer de réactiver le compte Administrateur, par exemple avec chntpw.

L’appareil disparaîtra d’Entra et Intune.

Admin locaux des appareils

https://learn.microsoft.com/en-us/entra/identity/devices/assign-local-admin

Selon le paramétrage d’Entra, l’utilisateur effectuant la jonction sera admin local du poste, ou non.
Ceci se paramètre dans
Entra admin center -> Entra ID -> Devices -> Overview -> Manage -> Device settings
et activer “Registering user is added as local administrator on the device during Microsoft Entra join (Preview)”.
À noter que l’utilisateur sera supprimé du groupe Local admins si la jonction à Entra est supprimée.

De plus, les utilisateurs avec les rôles Entra suivants :

  • “Global Admin”
  • “Entra Joined Device Local Administrator”
    auront également les droits admin lorsqu’ils ouvrent une session sur un poste (quel que soit le poste, on ne peut pas filtrer par ce mécanisme).
    Les modifications sur les membres de ces groupes seront bien effectives, même sur des postes qui ont été joints auparavant (il y’a bien sûr un délai de synchro nécessaire, qui peut aller jusqu’à 4h selon la doc MS).
    Si on révoque le rôle Local Admin d’un utilisateur, celui-ci le conserve tant que sa session reste ouverte. À sa prochaine ouverture de session, il ne les aura plus (si la révocation a été synchro sur les serveurs Entra)

On peut voir ces affectations dans netplwiz.
On voit l’utilisateur qui a fait la jonction directement dans les utilisateurs de l’ordinateur.
Si on va dans
lusrmgr.msc -> Groupes -> Administrateurs
on voit les SID, qui correspondent aux rôles Entra d’admin.

Vérification des SID

https://niklastinner.medium.com/convert-entra-roles-to-sids-132d93ea21fc
https://blog.piservices.fr/post/2023/10/28/azure-ad-convertir-un-guid-azure-ad-en-sid-en-utilisant-powershell

Le SID que l’on voit dans Windows n’est pas visible dans Entra. Si on veut vérifier les SID, il faut récupérer l’id du rôle Entra, puis le convertir en SID via un script que des personnes merveilleuses ont écrit et mis à dispo.

Pour récupérer l’id du rôle, aller sur MS Graph Explorer
Se connecter avec un compte ayant les droits d’accès corrects
Exécuter la requête GET sur https://graph.microsoft.com/v1.0/directoryRoles/
Dans le résultat, chercher (Ctrl-F) le rôle en question (par exemple en cherchant “device”).

Une fois trouvé, on copie l’ID, et on le colle dans le script suivant, dans la variable $objectId
On exécute le script via Powershell, et ça nous donne le SID Windows correspondant.

function Convert-AzureAdObjectIdToSid {
<#
.SYNOPSIS
Convert an Azure AD Object ID to SID
  
.DESCRIPTION
Converts an Azure AD Object ID to a SID.
Author: Oliver Kieselbach (oliverkieselbach.com)
The script is provided "AS IS" with no warranties.
  
.PARAMETER ObjectID
The Object ID to convert
#>
 
    param([String] $ObjectId)
 
    $bytes = [Guid]::Parse($ObjectId).ToByteArray()
    $array = New-Object 'UInt32[]' 4
 
    [Buffer]::BlockCopy($bytes, 0, $array, 0, 16)
    $sid = "S-1-12-1-$array".Replace(' ', '-')
 
    return $sid
}
 
$objectId = "73d664e4-0886-4a73-b745-c694da45ddb4"
$sid = Convert-AzureAdObjectIdToSid -ObjectId $objectId
Write-Output $sid