carlo.yznardo
lang=|
← Back to blog
WindowsApril 15, 2024/automatisation-du-deploiement-des-ordinateurs-avec-powershell.mdx

$ cat Automatisation du déploiement des Ordinateurs avec powershell

Contexte : Notre petite entreprise vend du matériel informatique aux clients. Le problème est que la configuration et le déploiement à grande échelle ne sont pas directement intégrés à notre flux de travail. Nous devons donc configurer chaque ordinateur que no…

Contexte :

Notre petite entreprise vend du matériel informatique aux clients. Le problème est que la configuration et le déploiement à grande échelle ne sont pas directement intégrés à notre flux de travail. Nous devons donc configurer chaque ordinateur que nous recevons avant de le mettre en stock.

Heureusement, j’ai eu un peu de temps libre, ce qui m’a permis de me concentrer sur un moyen d’automatiser cette tâche. J’ai choisi PowerShell comme langage, mais j’ai besoin d’un fichier .bat pour exécuter PowerShell avec tous les droits nécessaires pour modifier le système.Le fichier batch va aussi s’assurer que le PC est connecté à Internet et qu’il est lancé avec des droits administrateur avant d’exécuter le script PowerShell

En plus du système d’exploitation, nous installons généralement des logiciels de base sur chaque ordinateur, ainsi que notre raccourci d’assistance pour pouvoir prendre le contrôle de la machine. Voici donc ce que j’ai créé :

Fichier batch pour lancer le script :

@echo off
chcp 65001 > nul 2>&1
setlocal

REM Check for administrative rights
NET SESSION >nul 2>&1
if %errorLevel% neq 0 (
  echo Ce script nécessite des droits d'administration. Veuillez l'exécuter en tant qu'administrateur.
  pause
  powershell -Command "Start-Process -FilePath '%0' -Verb RunAs"
  exit /b
)

REM Check internet connectivity
ping -n 1 8.8.8.8 > nul 2>&1
if %errorLevel% neq 0 (
  echo La connexion internet n'est pas disponible. Veuillez vous assurer d'être connecté à internet avant de poursuivre.
  pause
  exit /b
)

REM Open CMD window in fullscreen
mode con: cols=160 lines=60

set "powershellScript=%~dp0Install.ps1"

echo Running PowerShell script: %powershellScript%

powershell -ExecutionPolicy Bypass -File "%powershellScript%"

endlocal

Code PowerShell principal:

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

# Désactiver le mode veille
powercfg.exe -change -standby-timeout-ac 0
powercfg.exe -change -hibernate-timeout-ac 0
powercfg.exe -change -monitor-timeout-ac 0

Write-Host $OutputEncoding.EncodingName
# Affichage
Write-Host -BackgroundColor Blue -ForegroundColor Yellow "
      _    ____     ____                     _ _
     / \  / ___|   / ___|___  _ __  ___  ___(_) |
    / _ \ \___ \  | |   / _ \| '_ \/ __|/ _ \ | |
   / ___ \ ___) | | |__| (_) | | | \__ \  __/ | |
  /_/   \_\____/   \____\___/|_| |_|___/\___|_|_|

- Par Carlo, L'alternant.
"

# Copie du fichier asconseil.exe sur le bureau :
Write-Host "Mise en place de l'icône ASC.exe" -BackgroundColor Yellow -ForegroundColor Black
$sourcePath = "$PSScriptRoot\Dependances\asconseil.exe"
$destinationPath = "C:\Users\Default\Desktop"

if (Test-Path -Path "$destinationPath\ASC.exe") \{
    Write-Host "ASC.exe existe déjà dans le chemin de destination" -BackgroundColor Yellow -ForegroundColor Black
\}
else \{
    Copy-Item -Path $sourcePath -Destination $destinationPath -Recurse
    Write-Host "OK" -BackgroundColor Green -ForegroundColor White
\}

#Install Command Update
Write-Host "Mise en place de Dell Command Update sur le poste" -BackgroundColor Yellow -ForegroundColor Black
$sourcePath = "$PSScriptRoot\Dependances\Dell"
$destinationPath = "C:\Program Files"

if (Test-Path -Path "$destinationPath\Dell") \{
    Write-Host "Le fichier existe déjà dans le chemin de destination" -BackgroundColor Yellow -ForegroundColor Black
\}
else \{
    Copy-Item -Path $sourcePath -Destination $destinationPath -Recurse
    Write-Host "OK" -BackgroundColor Green -ForegroundColor White
\}

# Copie du dossier dans la racine de C:
$sourcePath = "$PSScriptRoot\Dependances\Dotnet\sources"
$destinationPath = "C:\"

if (Test-Path -Path "$destinationPath\sources") \{
    Write-Host "Le dossier 'sources' existe déjà dans le chemin de destination" -BackgroundColor Yellow -ForegroundColor Black
\}
else \{
    Copy-Item -Path $sourcePath -Destination $destinationPath -Recurse
    Write-Host "OK" -BackgroundColor Green -ForegroundColor White
\}

# Exécution de la commande DISM
Write-Host "Installation de DOTNET" -BackgroundColor Yellow -ForegroundColor Black
$command = "DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:C:\sources\sxs"
cmd.exe /c $command
Write-Host "OK" -BackgroundColor Green -ForegroundColor White

# Activation de l'utilisateur local nommé Administrateur
Write-Host "Création de l'ADMIN LOCAL" -BackgroundColor Yellow -ForegroundColor Black
$adminUsername = "Administrateur"
$adminPassword = CENSORED
$null = net user $adminUsername $adminPassword /active:yes
Write-Host "OK" -BackgroundColor Green -ForegroundColor White

# Installation des navigateurs
$sourcePath = "$PSScriptRoot\Dependances\browsers.exe"
Write-Host "Installation des navigateurs" -BackgroundColor Yellow -ForegroundColor Black
Start-Process -FilePath $sourcePath -Wait
Write-Host "OK" -BackgroundColor Green -ForegroundColor White

# Check if Adobe Acrobat is already installed by checking the registry key
$CheckAdobeReg = Test-Path "HKLM:\SOFTWARE\Adobe\Adobe Acrobat"
if ($CheckAdobeReg) \{
    Write-Host "Adobe Acrobat is already installed. Skipping Adobe Acrobat installation." -ForegroundColor Red
\}
else
\{
# Installation d'Adobe Acrobat
Write-Host "=========L'installation d'Adobe Acrobat est en cours. Cette procédure peut prendre entre 5 et 10 minutes. Prends un café :) =========" -BackgroundColor Yellow -ForegroundColor Black
# Détermination de la dernière version de Reader
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$session.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36"
$result = Invoke-RestMethod -Uri "https://rdc.adobe.io/reader/products?lang=mui&site=enterprise&os=Windows%2011&country=US&nativeOs=Windows%2010&api_key=dc-get-adobereader-cdn" `
    -WebSession $session `
    -Headers @\{
        "Accept"="*/*"
        "Accept-Encoding"="gzip, deflate, br"
        "Accept-Language"="fr-FR,fr;q=0.9"
        "Origin"="https://get.adobe.com"
        "Referer"="https://get.adobe.com/"
        "Sec-Fetch-Dest"="empty"
        "Sec-Fetch-Mode"="cors"
        "Sec-Fetch-Site"="cross-site"
        "sec-ch-ua"="`" Not A;Brand`";v=`"99`", `"Chromium`";v=`"101`", `"Google Chrome`";v=`"101`""
        "sec-ch-ua-mobile"="?0"
        "sec-ch-ua-platform"="`"Windows`""
        "x-api-key"="dc-get-adobereader-cdn"
    \}

$version = $result.products.reader[0].version
$version = $version.replace('.','')

# Téléchargement
$URI = "https://ardownload2.adobe.com/pub/adobe/acrobat/win/AcrobatDC/$Version/AcroRdrDCx64$($Version)_MUI.exe"
$OutFile = Join-Path $env:TEMP "AcroRdrDCx64$($version)_MUI.exe"
Write-Host "Téléchargement de la version $version depuis $URI vers $OutFile"
Invoke-WebRequest -Uri $URI -OutFile $OutFile -Verbose

# Installation silencieuse
Start-Process -FilePath $OutFile -ArgumentList "/sAll /rs /rps /msi /norestart /quiet EULA_ACCEPT=YES" -WorkingDirectory $env:TEMP -Wait -LoadUserProfile

# Nettoyage
Remove-Item $OutFile
Write-Host "OK" -BackgroundColor Green -ForegroundColor White
\}

#MAJ Command Update
Write-Host "MAJ Dell Command Update" -BackgroundColor Yellow -ForegroundColor Black
Set-Location C:\Program Files\Dell\CommandUpdate
.\dcu-cli.exe /scan
.\dcu-cli.exe /applyupdates
Write-Host "OK" -BackgroundColor Green -ForegroundColor White

#Install Windows Update
Write-Host "Mise a jour de Windows" -BackgroundColor Yellow -ForegroundColor Black
Set-PSRepository -Name PSGallery -InstallationPolicy Unrestricted -Force
Install-Module -Name PSWindowsUpdate -Force
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted -Force
Import-Module PSWindowsUpdate
Get-WindowsUpdate -AcceptAll -Install
Write-Host "OK" -BackgroundColor Green -ForegroundColor White

#Deleting the user named Utilisateur
Write-Host "Utilisateur 'user' Effacé" -BackgroundColor Yellow -ForegroundColor Black
$utilisateurUsername = "user"
$null = net user $utilisateurUsername /delete

# Log off the current user
Restart-Computer -force

Fonctionnalités du script:

1. Optimisation du système:

  • Désactivation du mode veille pour maximiser la performance.

  • Configuration du mode d’alimentation pour un usage optimal.

2. Installation des logiciels de base:

  • Déploiement de logiciels prérequis tels que ASC.exe et Dell Command Update via des copies locales.

  • Installation de .NET Framework 3.x via la commande DISM pour garantir la compatibilité logicielle.

3. Gestion des comptes utilisateurs:

  • Activation du compte administrateur local pour une gestion facilitée.

  • Suppression du compte utilisateur temporaire « Utilisateur » présent par défaut.

4. Installation des logiciels complémentaires:

  • Installation des navigateurs web les plus utilisés (Chrome, Firefox, Edge) pour une navigation optimale.

  • Vérification et installation d’Adobe Acrobat, en s’adaptant à la version la plus récente disponible en ligne.

5. Mise à jour du système:

  • Mise à jour de Dell Command Update pour garantir la mise à jour des pilotes Dell.

  • Installation des mises à jour Windows via le module PSWindowsUpdate pour une sécurité accrue.

6. Finalisation du processus:

  • Déconnexion de la session courante pour une application effective des modifications.

  • Redémarrage de l’ordinateur pour finaliser la configuration et garantir un environnement stable.