Sto modificando il PATH su diversi server W2k3 in PowerShell per convertire determinati percorsi con spazi vuoti ai loro equivalenti 8.3. Dopo diverse trasformazioni regex, corro i seguenti due comandi:Come si gestisce l'espansione della variabile PATH di Windows quando impostata da PowerShell?
# Set the path for this process
$env:PATH = $path
# Set the path for the Machine
[System.Environment]::SetEnvironmentVariable('PATH', $path,[System.EnvironmentVariableTarget]::Machine)
Dopo di loro esecuzione, il percorso è cambiato in modi che non ho intenzione. % SystemRoot% viene espanso uniformemente in C: \ Windows. Non riesco a vedere dove questo segnali l'apocalisse, ma preferirei mantenere% SystemRoot%, quindi mi sono divertito fino a quando non ho ottenuto% SystemRoot% per comparire nuovamente nel percorso, ma quando eseguo il percorso non si espande più e non è più lavori. L'eco del percorso in CLI restituisce una stringa non estesa (questo è errato) e i comandi nel SystemRoot non possono più essere trovati.
Se poi aggiungo una voce nulla al percorso ";;", senza alterare alcun altro testo nel PERCORSO, inizia a funzionare correttamente.
Quindi la mia domanda è come modificare il percorso in modo programmatico utilizzando PowerShell in modo da non compromettere l'espansione delle variabili all'interno del percorso?
2 note: 1) apro una nuova CLI per ciascun test e 2) il percorso che ho letto da $ env: PATH è espanso, quindi sto leggendo c: \ windows e modificando manualmente il valore su% SystemRoot % quindi spingere quel valore verso l'ambiente. – codepoke
Cosa c'è in '$ path' quando lo si imposta su' PATH'? – manojlds
È diverso su ogni server, ma ...;% SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem;% SystemRoot% \ system32 \ WindowsPowerShell \ v1.0; ... è un componente su tutti di loro. Quando leggo $ path, viene esteso a c: \ Windows durante i processi di lettura. Devo -ire il valore espanso con il suo equivalente variabile prima di impostarlo. Il valore del percorso $ con le variabili non si espande di nuovo a meno che non lo tocchi manualmente attraverso la finestra di dialogo delle proprietà. – codepoke