logo rss

Comment exécuter un script PowerShell non signé au démarrage avec les stratégies de groupe

PowerShell logo

Dans un environnement Active Directory il peut être utile de pouvoir exécuter au démarrage un script non signé PowerShell via les stratégies de groupe.

Nous allons voir ici comment exécuter un script PowerShell sur les postes présents dans l'OU Workstations. Ici notre script PowerShell se chargera de supprimer les Built-In Applications, mais on pourra utiliser n'importe quel script PowerShell. La GPO étant associée à l'ordinateur, elle fonctionnera même si la session est ouverte en simple tilisateur, (c'est à dire si l'utilisateur n'a pas les Droits Administrateur).

Création d'un fichier .bat

Créer un fichier remove_appx.bat dans le répertoire partagé netlogon.

Capture d'écran du dossier des scripts de NETLOGON montrant un fichier batch nommé remove_appx.bat. @echo off REM Delete the PowerShell script del c:\windows\temp\remove_appx.ps1 REM Copy the PowerShell script to the Temp folder copy \\shebangthedolphins.net\netlogon\SCRIPTS\remove_appx.ps1 c:\windows\temp\ /Z /Y REM Run the PowerShell script %windir%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File c:\windows\temp\remove_appx.ps1 REM Delete the PowerShell script del c:\windows\temp\remove_appx.ps1
  • Que va faire le fichier .bat?
    • Copier le script PowerShell dans le dossier Temp
    • Exécuter le script PowerShell
    • Supprimer le script PowerShell

Création du script PowerShell

Créer un fichier remove_appx.ps1 dans le répertoire partagé netlogon.

Capture d'écran du dossier des scripts de NETLOGON montrant un fichier batch nommé remove_appx.bat. Set-Content -Path 'C:\remove_app.txt' -Value 'OK' #permet de vérifier que le script s'est bien exécuté sur la machine Get-AppxPackage -AllUsers | ? { $_.Name -match "3dbuilder" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "windowsalarms" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "windowscommunicationsapps" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "windowscamera" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "officehub" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "skypeapp" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "getstarted" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "zunemusic" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "windowsmaps" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "solitairecollection" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "bingfinance" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "zunevideo" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "bingnews" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "people" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.People" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "windowsphone" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "bingsports" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "soundrecorder" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "bingweather" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "xboxapp" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "MixedReality" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "hub" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "YourPhone" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.OneConnect" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.XboxGamingOverlay" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "twitter" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "candycrush" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "gethelp" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "messaging" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "3Dviewer" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "LinkedInforWindows" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.RemoteDesktop" } | Remove-AppxPackage -AllUsers #XBOX Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.Xbox.TCUI" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.XboxGameOverlay" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.XboxIdentityProvider" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "Microsoft.XboxSpeechToTextOverlay" } | Remove-AppxPackage -AllUsers Get-AppxPackage -AllUsers | ? { $_.Name -match "xbox" } | Remove-AppxPackage -AllUsers foreach ($app in $(Get-AppxPackage -AllUsers | ? { $_.Name -match "xbox" })) { $app | Remove-AppxPackage -AllUsers }

Création de l'Objet de stratégie de groupe

  • Ouvrir la console Utilisateurs et ordinateurs Active Directory :
Capture d'écran de la boîte de dialogue Exécuter de Windows avec la commande dsa.msc saisie, montrant des privilèges administratifs.
  • Déplacer ses Ordinateurs dans la bonne OU (Unité d'organisation) :
Capture d'écran d'Active Directory Users and Computers avec le dossier Workstations sélectionné, montrant un ordinateur nommé PC01.
  • Ouvrir la console Gestion de stratégie de groupe :
Capture d'écran de la boîte de dialogue Exécuter de Windows avec la commande gpmc.msc saisie, prête à ouvrir la console de gestion des stratégies de groupe.
  • Créer l'Objet de stratégie de groupe :
Capture d'écran de la gestion des stratégies de groupe montrant l'option de création et de liaison d'une nouvelle GPO dans le domaine.
  • Donner un nom à la GPO :
Capture d'écran de la boîte de dialogue Nouvelle GPO avec « Exécuter - Script PowerShell » comme nom et aucune GPO Source Starter sélectionnée.
  • Modifier la GPO :
Capture d'écran du menu contextuel de la gestion des stratégies de groupe avec l'option « Modifier » en surbrillance pour la GPO « Exécuter - Script PowerShell ».
  • Aller dans Configuration ordinateur > Stratégies > Paramètres Windows > Scripts > Démarrage > Clic Droit > Propriétés :
Capture d'écran de l'éditeur de gestion de stratégie de groupe montrant le script « Démarrage » avec l'option « Propriétés » en surbrillance.
  • Rester sur l'onglet Scripts et cliquer sur Ajouter… :
Capture d'écran de la boîte de dialogue Propriétés du démarrage avec une flèche pointant vers le bouton « Ajouter » permettant d'ajouter un nouveau script.
  • Cliquer sur Parcourir… :
Capture d'écran de la boîte de dialogue Ajouter un script avec une flèche pointant vers le bouton « Parcourir » pour sélectionner un script.
  • Parcourir le dossier de partage NETLOGON et sélectionner le script .bat :
Capture d'écran de la boîte de dialogue du navigateur de fichiers montrant le dossier des scripts NETLOGON avec remove_appx.bat sélectionné et le bouton Ouvrir en surbrillance.
  • On cliquer sur OK
Capture d'écran de la boîte de dialogue Ajouter un script avec une flèche pointant vers le bouton « OK » pour confirmer le chemin du script.

Depuis l'ordinateur de l'utilisateur

Vérifions que la stratégie a bien été appliquée.

  • Redémarrer d'abord l'ordinateur client, puis ouvrir une console administrateur et exécuter la commande suivante :
C:\WINDOWS\system32>gpresult /z /scope computer
  • On vérifiera dans la partie Scripts de démarrage que le nom de la stratégie est bien visible :
Capture d'écran de l'ensemble de règles résultant pour l'ordinateur, montrant les détails du script de démarrage exécuté remove_appx.bat.
  • On pourra aussi vérifier la présence du fichier c:\std_rocks.txt. (Pour rappel, c'est ce que fait la première ligne du script PowerShell : Set-Content -Path 'C:\std_rocks.txt' -Value 'OK')
Capture d'écran du répertoire Local Disk (C :) montrant un document texte nommé std_rocks.txt mis en évidence
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

adresse mail de contact