pinglabel - stock.adobe.com

Gérez la variable PATH de Windows avec PowerShell

La variable d’environnement PATH indique où se trouvent les exécutables. La manipuler permet de valider l’installation ou la désinstallation d’utilitaires.

La variable d’environnement Windows PATH indique l’endroit – le chemin – où les applications recherchent les exécutables. Sa modification peut autant servir à finaliser l’installation d’un système ou d’un utilitaire qu’à les rendre inopérants. Les administrateurs peuvent utiliser PowerShell pour gérer cette variable PATH. Ce procédé implique la manipulation de chaînes de caractères.

Pour accéder à la variable PATH, utilisez :

$env:Path

Selon votre système, la chaîne de variables PATH renvoyée peut être plus courte ou plus longue que celle de la figure 1. Un point-virgule sépare chaque chemin dans la liste.

Returned string for PATH variable
Figure 1: la variable PATH

La division de la chaîne de caractères a nécessité la commande suivante :

$env:Path -split ';'

Cette commande de la figure 2 liste les chemins qui font partie de la variable PATH sous la forme d’un tableau de chaînes de caractères.

string array of path values
Figure 2: La variable PATH sous forme de tableau

Faire des ajouts à la variable d’environnement PATH

Pour ajouter un nouveau chemin dans le PATH, il faudra ajouter à la fin de la chaîne un point-virgule puis le nouveau chemin. Nous pourrons utiliser PowerShell pour vérifier si le chemin que nous voulons ajouter n’est pas déjà présent.

Tout d’abord, choisissez un chemin à ajouter et mettez-le dans une variable $addPath :

$addPath = 'C:\TopSecret\Bin'

Les chemins d’accès qui font référence à un répertoire sont techniquement corrects. Que l’on indique, ou que l’on omette la barre oblique "\", dans tous les cas, ce chemin d’accès sera résolu correctement.

Ensuite, pour ajouter un chemin à la variable PATH, il faut d’abord vérifier si le chemin est déjà présent. Utilisez la commande suivante pour vérifier si le nouveau chemin est déjà inclus avec ou sans "\" à la fin :

$regexAddPath = [regex]::Escape($addPath)
$arrPath = $env:Path -split ';' | Where-Object {$_ -notMatch 
"^$regexAddPath\\?"}

Puisque nous utilisons des expressions régulières pour vérifier la présence d’un "\", échappez la variable $addPath, car elle contient probablement des barres obliques.

Une fois que nous savons que notre chaîne de chemins n’inclut pas notre nouveau chemin, nous pouvons enfin l’affecter à la variable PATH en l’ajoutant derrière un point-virgule :

$env:Path = ($arrPath + $addPath) -join ';'

Voici comment faire tout ceci en une seule fonction :

Function Add-PathVariable {
    param (
        [string]$addPath
    )
    if (Test-Path $addPath){
        $regexAddPath = [regex]::Escape($addPath)
        $arrPath = $env:Path -split ';' | Where-Object {$_ -notMatch 
"^$regexAddPath\\?"} $env:Path = ($arrPath + $addPath) -join ';' } else { Throw "'$addPath' is not a valid path." } }

Comment supprimer un chemin

Il est tout aussi simple de supprimer un chemin de la variable d’environnement PATH de Windows que d’en ajouter un. Pour cet exemple, revenez à la figure 2, qui montre certains des chemins sur l’ordinateur, et décidez de supprimer Java en le mettant dans une variable $removePath :

$removePath = 'C:\Program Files (x86)\Common
Files\Oracle\Java\javapath'

Il suffit à présent de fractionner le PATH et de conserver tous les chemins qui ne correspondent pas au $removePath, avec éventuellement une barre oblique. Puis, nous assignons simplement cette sortie à la variable PATH :

$regexRemovePath = [regex]::Escape($removePath)
$arrPath = $env:Path -split ';' | Where-Object {$_ -notMatch 
"^$regexRemovePath\\?"} $env:Path = $arrPath -join ';'

Comme précédemment, nous pouvons combiner ces commandes en une seule fonction :

Set-PathVariable {
    param (
        [string]$AddPath,
        [string]$RemovePath
    )
    $regexPaths = @()
    if ($PSBoundParameters.Keys -contains 'AddPath'){
        $regexPaths += [regex]::Escape($AddPath)
    }

    if ($PSBoundParameters.Keys -contains 'RemovePath'){
        $regexPaths += [regex]::Escape($RemovePath)
    }
    
    $arrPath = $env:Path -split ';'
    foreach ($path in $regexPaths) {
        $arrPath = $arrPath | Where-Object {$_ -notMatch "^$path\\?"}
    }
    $env:Path = ($arrPath + $addPath) -join ';'
}

Pour approfondir sur Administration de systèmes

Close