powershell - Fjernelse af linjer fra Windows-sti-variabel

Indlæg af Hanne Mølgaard Plasc

Problem



Lad os sige, at dette er, hvad mit Windows-system PATH ser ud:



  C: \ oracle \ produkt \ 11.2.0 \ 32bit \ client\_1 \ bin; C: \ oracle \ produkt \ 11.2.0 \ 64bit \ client\_1 \ bin; C: \ WINDOWS \ system32; C: \ WINDOWS; C: \ WINDOWS \ System32 \ Wbem, C: \ WINDOWS \ System32 \ WindowsPowerShell \ v1.0 \



Hvordan ville jeg fjerne den allerførste post og tilføje den til slutningen af ​​listen? Jeg ved, at du kan bruge setx til dette, men jeg vil hellere gøre dette ved hjælp af PowerShell.

Bedste reference


# Split the existing path into the 1st entry and the rest.
$first, $rest = $env:Path -split ';'

# Rebuild the path with the first entry appended.
$env:Path = ($rest + $first) -join ';'

# To make this change persistent for the current user, 
# an extra step is needed:
[Environment]::SetEnvironmentVariable('Path', $env:Path, 'User')

Andre referencer 1


En hurtig og enkel måde:


$values = 'C:oracleproduct11.2.032bitclient\_1in;C:oracleproduct11.2.064bitclient\_1in;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WIN DOWSSystem32WindowsPowerShellv1.0' -split ';'                                    #'

$result = $values[$values.Count-1] + ';'   
for($i = 1; $i -lt $values.Count-1; $i++){ $result += $values[$i] + ';' }
$result += $values[0]

$result

Andre referencer 2


Jeg er ikke for fortrolig med PowerShell scripting, men jeg tror, ​​du kan skrive ren C # i den. Hvis det er så, så hjælper C #.


Bemærk at der er tre PATH-miljøvariabler at vælge imellem: den ene til processen, den ene til brugeren og den, der er givet til maskinen selv. For demo-koden nedenfor valgte jeg den ene til processen.


var whichPath = EnvironmentVariableTarget.Process;

string path = Environment.GetEnvironmentVariable("PATH", whichPath);

string [] pathEntries = path.Split(';');

if (pathEntries.Length > 1)
{
    // Initialize to the necessary length, for efficiency.
    var sb = new StringBuilder(capacity: path.Length);
    for(int i = 1; i < pathEntries.Length; ++i)
    {
        sb.Append(pathEntries[i]).Append(';');
    }
    sb.Append(pathEntries[0]).Append(';');

    Environment.SetEnvironmentVariable("PATH", sb.ToString(), target: whichPath);
}