Comment gérer l’expansion de la variable Windows PATH lorsqu’elle est définie à partir de PowerShell?

Je modifie le PATH sur plusieurs serveurs W2k3 dans PowerShell pour convertir certains chemins avec des espaces vides à leurs équivalents 8.3. Après plusieurs transformations de regex, j’exécute les deux commandes suivantes:

# Set the path for this process $env:PATH = $path # Set the path for the Machine [System.Environment]::SetEnvironmentVariable('PATH', $path,[System.EnvironmentVariableTarget]::Machine) 

Après les avoir exécutés, le chemin a changé de manière que je n’avais pas l’intention. % SystemRoot% est étendu uniformément à C: \ Windows. Je ne vois pas où cela signale l’apocalypse, mais je préfère garder le% SystemRoot%, alors j’ai sortingpoté jusqu’à ce que% SystemRoot% apparaisse à nouveau dans le chemin, mais quand je le fais, le chemin ne se développe plus et n’est plus travaux. Faire écho au chemin d’access à l’interface de ligne de commande renvoie une chaîne non développée (ce qui est faux) et les commandes de la racine système ne peuvent plus être trouvées.

Si j’ajoute ensuite une entrée null au Path “;;”, sans modifier aucun autre texte du PATH, cela commence à fonctionner correctement.

Donc, ma question est de savoir comment modifier le chemin d’access par programmation à l’aide de PowerShell afin de ne pas dilater l’expansion des variables dans le chemin d’access.

Autant que je [Environment]::SetEnvironmentVariable() , vous ne pouvez pas faire cela avec la méthode [Environment]::SetEnvironmentVariable() et vous ne pouvez pas le faire avec le fournisseur de registre. Cependant, vous pouvez accéder au chemin système env var dans le registre en utilisant la classe Microsoft.Win32.RegistryKey comme suit:

 C: \ PS> $ key = [Microsoft.Win32.Registry] :: LocalMachine.OpenSubKey ('SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environnement', $ true)
 C: \ PS> $ path = $ key.GetValue ('Path', $ null, 'DoNotExpandEnvironmentNames')
 C: \ PS> $ path
 ...;% systemroot% \ System32 \ WindowsPowerShell \ v1.0 \
 C: \ PS> $ key.SetValue ('Path', $ path + ';% Windir% \ Symbols', 'ExpandSsortingng')
 C: \ PS> $ key.Dispose ()

Cela vous permettra de sauvegarder le PATH mis à jour et de conserver les variables qui apparaissent dans la valeur Path.