Impostazione delle variabili di ambiente di Windows PowerShell


608

Ho scoperto che l'impostazione della variabile di ambiente PATH influisce solo sul vecchio prompt dei comandi. PowerShell sembra avere impostazioni di ambiente diverse. Come posso modificare le variabili di ambiente per PowerShell (v1)?

Nota:

Voglio rendere permanenti le mie modifiche, quindi non devo impostarle ogni volta che eseguo PowerShell. PowerShell ha un file di profilo? Qualcosa come il profilo Bash su Unix?


1
Mi piacerebbe avere un profilo centrale situato su una condivisione file. La sincronizzazione è un dolore. Creazione di un profilo stub con. \\ computer \ share \ path \ Profile.ps1 sembra un kludge (prova Notepad $ Profile). Sarebbe bello se ci fosse un modo per cambiare in modo permanente la variabile automatica $ Profile.
Nathan Hartley,

5
No l'ambiente PATH non influisce comandi PowerShell rapida così. Ciò che differisce però è che PowerShell non accetta i percorsi racchiusi tra virgolette. Soluzione: rimuovere tutte le virgolette ( ") nella variabile d'ambiente path
Nilzor

3
SE TERRENI QUI PER PS> v1 ... A seguito del commento di Nilzor sopra: Usa questo per rimuovere tutto "dai percorsi nella variabile d'ambiente PATH per la tua sessione:$($Env:PATH).Split(';') | %{ $str += "$($_.Trim('"'));" }; $Env:PATH=$str
d3r3kk

Risposte:


479

La modifica delle variabili di ambiente effettive può essere effettuata utilizzando le env: namespace / driveinformazioni. Ad esempio, questo codice aggiornerà la variabile di ambiente del percorso:

$env:Path = "SomeRandomPath";             (replaces existing path) 
$env:Path += ";SomeRandomPath"            (appends to existing path)

Esistono modi per rendere permanenti le impostazioni dell'ambiente, ma se le si utilizza solo da PowerShell, è probabilmente molto meglio utilizzare il proprio profilo per avviare le impostazioni. All'avvio, PowerShell eseguirà tutti i file .ps1 che trova nella WindowsPowerShelldirectory nella cartella Documenti. In genere hai già un file profile.ps1 . Il percorso sul mio computer è

C:\Users\JaredPar\Documents\WindowsPowerShell\profile.ps1

38
$ profile è una variabile automatica che punta al tuo profilo utente per tutti gli host PowerShell.
JasonMArcher,

16
Si noti che (split-path $ profile) (per ottenere la cartella contenente) può contenere più file di profilo: profile.ps1 deve essere caricato da tutti gli host, <nome-host> _profile.ps1 solo dall'host specificato. Per PowerShell.exe (host della console), si tratta di Microsoft.PowerShell_profile.ps1.
Richard,

10
Cosa succede se non ho una cartella WindowsPowerShell nei miei documenti? Devo creare la cartella e il file? Cosa devo inserire nel file se voglio aggiungere C:\path\to\file.extle variabili d'ambiente? EDIT: l'ho già trovato. La risposta è sì, creala. Il file dovrebbe consistere di 1 riga: $env:path += ;C:\path\to\file.ext".
Lewistrick,

7
@Lewistrick Non hai un profilo per impostazione predefinita. Ho seguito queste istruzioni per crearne uno: howtogeek.com/50236/customizing-your-powershell-profile
MikeB

16
Fai attenzione: bloccherà il tuo percorso esistente. $env:Path = "SomeRandomPath"; Invece - vedi @mloskot, sotto.
John Mark,

626

Se, durante una sessione di PowerShell, è necessario aggiungere temporaneamente la variabile di ambiente PATH, è possibile farlo in questo modo:

$env:Path += ";C:\Program Files\GnuWin32\bin"

4
+1 :: Questo one-liner è abbastanza efficace per le invocazioni basate sulla sessione come con mingw ... IE $ env: PATH + = "; c: \ MinGW \ msys \ 1.0 \ bin" ^ {some mingw bin ... }
Eddie B,

2
e come rimuovo un percorso?
becko,

11
Se hai bisogno che il tuo percorso sia chiamato prima di quello standard, inseriscilo all'inizio $env:Path = "C:\MyPath;$env:Path"
Michael Freidgeim,

4
**** Non dimenticare il punto e virgola all'inizio della stringa aggiunta, come si vede nel commento di @Kevin. Questo è abbastanza ovvio, ma può essere perso se semplicemente copi / incolli il codice nella risposta e non hai un punto e virgola alla fine del percorso esistente. Proverò a inviare una modifica.
Matt Goodrich,

1
@MattGoodrich Ho effettuato il rollback alla revisione precedente
Cœur il

278

È inoltre possibile modificare le variabili di ambiente utente / sistema in modo permanente (ovvero sarà persistente tra i riavvii della shell) con quanto segue:

Modifica una variabile di ambiente di sistema

[Environment]::SetEnvironmentVariable
     ("Path", $env:Path, [System.EnvironmentVariableTarget]::Machine)

Modifica una variabile di ambiente utente

[Environment]::SetEnvironmentVariable
     ("INCLUDE", $env:INCLUDE, [System.EnvironmentVariableTarget]::User)

Utilizzo dai commenti: aggiungere alla variabile di ambiente di sistema

[Environment]::SetEnvironmentVariable(
    "Path",
    [Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::Machine) + ";C:\bin",
    [EnvironmentVariableTarget]::Machine)

La soluzione basata su stringhe è anche possibile se non si desidera scrivere tipi

[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\bin", "Machine")

6
Questo è molto utile per i sistemi ad accesso limitato.
h0tw1r3,

14
@AndresRiofrio, Sì, questo è permanente. Utilizzo: [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\bin", [EnvironmentVariableTartget::Machine) non vedrai il risultato di questa modifica finché non avvierai una nuova sessione di PowerShell. Cioè, se si ispeziona $ env: Path subito dopo aver eseguito questo comando, si vedrà che $ env: Path era prima del comando. Per aggiornare, chiudere e aprire la shell o avviare una nuova sessione.
FLGMwt,

7
@FLGMwt si dispone di un errore di battitura, è corretto: [Ambiente] :: SetEnvironmentVariable ( "Path", $ ENV: Percorso + "; C: \ bin", [EnvironmentVariableTarget] :: Machine)
enthus1ast

10
È possibile scrivere la stringa "Macchina" o "Utente" invece dell'intero enum .NET. Da Technet .
bouvierr,

3
Penso che quella risposta dovrebbe anche dimostrare l'utilizzo per l'impostazione della variabile utente, in questo modo[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";C:\bin", "User")
Saito,

63

Dal prompt di PowerShell:

setx PATH "$env:path;\the\directory\to\add" -m

Dovresti quindi vedere il testo:

SUCCESS: Specified value was saved.

Riavvia la sessione e la variabile sarà disponibile. setxpuò anche essere usato per impostare variabili arbitrarie. Digitare setx /?al prompt per la documentazione.

Prima di fare confusione con il tuo percorso in questo modo, assicurati di salvare una copia del tuo percorso esistente eseguendo $env:path >> a.outun prompt di PowerShell.


5
Sembra funzionare solo quando "in esecuzione come amministratore", e successivamente ha effetto solo per le console PowerShell "in esecuzione come amministratore", non con quelle in esecuzione regolarmente.
matanster,


12
Ahi - appena colpito dal limite di 1024 caratteri di setx; per fortuna ho seguito il consiglio di registrare il valore esistente di $ end: Path. Solo qualcosa di cui essere a conoscenza: superuser.com/questions/387619/…
Jonno

3
Perché non impostare $env:PATHprima, quindi in setx /m PATH "$env:PATH"modo che si applichi localmente e globalmente senza riavvio della shell?
venerdì

1
Bello! Sebbene setx non sia un cmdlet nativo, è comunque un'alternativa molto migliore e facilmente dimenticabile a quelle odiose e lunghe chiamate .NET Framework! È sconcertante che anche Powershell 7 non sia ancora dotato di un cmdlet ufficiale per persistere negli avvocati. Che cosa. Sembra una caratteristica che dovrebbe avere la parità con "ls".
Jonas

27

Come la risposta di JeanT , volevo un'astrazione per aggiungere al percorso. A differenza della risposta di JeanT, ne avevo bisogno per funzionare senza l'interazione dell'utente. Altro comportamento che stavo cercando:

  • Si aggiorna in $env:Pathmodo che la modifica abbia effetto nella sessione corrente
  • Persiste la modifica della variabile di ambiente per sessioni future
  • Non aggiunge un percorso duplicato quando esiste già lo stesso percorso

Nel caso sia utile, eccolo qui:

function Add-EnvPath {
    param(
        [Parameter(Mandatory=$true)]
        [string] $Path,

        [ValidateSet('Machine', 'User', 'Session')]
        [string] $Container = 'Session'
    )

    if ($Container -ne 'Session') {
        $containerMapping = @{
            Machine = [EnvironmentVariableTarget]::Machine
            User = [EnvironmentVariableTarget]::User
        }
        $containerType = $containerMapping[$Container]

        $persistedPaths = [Environment]::GetEnvironmentVariable('Path', $containerType) -split ';'
        if ($persistedPaths -notcontains $Path) {
            $persistedPaths = $persistedPaths + $Path | where { $_ }
            [Environment]::SetEnvironmentVariable('Path', $persistedPaths -join ';', $containerType)
        }
    }

    $envPaths = $env:Path -split ';'
    if ($envPaths -notcontains $Path) {
        $envPaths = $envPaths + $Path | where { $_ }
        $env:Path = $envPaths -join ';'
    }
}

Dai un'occhiata alla mia idea per la Remove-EnvPathfunzione corrispondente .


16

Sebbene l'attuale risposta accettata funzioni nel senso che la variabile path viene costantemente aggiornata dal contesto di PowerShell, in realtà non aggiorna la variabile d'ambiente memorizzata nel registro di Windows.

Per farlo, puoi ovviamente usare anche PowerShell:

$oldPath=(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).Path

$newPath=$oldPath+’;C:\NewFolderToAddToTheList\’

Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH Value $newPath

Ulteriori informazioni sono nel post del blog Utilizzare PowerShell per modificare il percorso ambientale

Se si utilizzano le estensioni della comunità PowerShell, il comando corretto per aggiungere un percorso al percorso della variabile di ambiente è:

Add-PathVariable "C:\NewFolderToAddToTheList" -Target Machine

12

Tutte le risposte che suggeriscono una modifica permanente presentano lo stesso problema: interrompono il valore di registro del percorso.

SetEnvironmentVariabletrasforma il REG_EXPAND_SZvalore %SystemRoot%\system32 in un REG_SZvalore di C:\Windows\system32.

Anche tutte le altre variabili nel percorso vengono perse. L'aggiunta di nuovi utilizzando %myNewPath%non funzionerà più.

Ecco uno script Set-PathVariable.ps1che utilizzo per risolvere questo problema:

 [CmdletBinding(SupportsShouldProcess=$true)]
 param(
     [parameter(Mandatory=$true)]
     [string]$NewLocation)

 Begin
 {

 #requires –runasadministrator

     $regPath = "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
     $hklm = [Microsoft.Win32.Registry]::LocalMachine

     Function GetOldPath()
     {
         $regKey = $hklm.OpenSubKey($regPath, $FALSE)
         $envpath = $regKey.GetValue("Path", "", [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
         return $envPath
     }
 }

 Process
 {
     # Win32API error codes
     $ERROR_SUCCESS = 0
     $ERROR_DUP_NAME = 34
     $ERROR_INVALID_DATA = 13

     $NewLocation = $NewLocation.Trim();

     If ($NewLocation -eq "" -or $NewLocation -eq $null)
     {
         Exit $ERROR_INVALID_DATA
     }

     [string]$oldPath = GetOldPath
     Write-Verbose "Old Path: $oldPath"

     # Check whether the new location is already in the path
     $parts = $oldPath.split(";")
     If ($parts -contains $NewLocation)
     {
         Write-Warning "The new location is already in the path"
         Exit $ERROR_DUP_NAME
     }

     # Build the new path, make sure we don't have double semicolons
     $newPath = $oldPath + ";" + $NewLocation
     $newPath = $newPath -replace ";;",""

     if ($pscmdlet.ShouldProcess("%Path%", "Add $NewLocation")){

         # Add to the current session
         $env:path += ";$NewLocation"

         # Save into registry
         $regKey = $hklm.OpenSubKey($regPath, $True)
         $regKey.SetValue("Path", $newPath, [Microsoft.Win32.RegistryValueKind]::ExpandString)
         Write-Output "The operation completed successfully."
     }

     Exit $ERROR_SUCCESS
 }

Spiego il problema in modo più dettagliato in un post sul blog .


Dovrebbe essere: $ newPath = $ newPath -replace ";;", ";" ?
Joe Johnston,

8

Questo imposta il percorso per la sessione corrente e richiede all'utente di aggiungerlo permanentemente:

function Set-Path {
    param([string]$x)
    $Env:Path+= ";" +  $x
    Write-Output $Env:Path
    $write = Read-Host 'Set PATH permanently ? (yes|no)'
    if ($write -eq "yes")
    {
        [Environment]::SetEnvironmentVariable("Path",$env:Path, [System.EnvironmentVariableTarget]::User)
        Write-Output 'PATH updated'
    }
}

Puoi aggiungere questa funzione al tuo profilo predefinito, ( Microsoft.PowerShell_profile.ps1), generalmente situato in %USERPROFILE%\Documents\WindowsPowerShell.


6

Sulla base della risposta di @Michael Kropat ho aggiunto un parametro per anteporre il nuovo percorso alla PATHvariabile esistente e un controllo per evitare l'aggiunta di un percorso inesistente:

function Add-EnvPath {
    param(
        [Parameter(Mandatory=$true)]
        [string] $Path,

        [ValidateSet('Machine', 'User', 'Session')]
        [string] $Container = 'Session',

        [Parameter(Mandatory=$False)]
        [Switch] $Prepend
    )

    if (Test-Path -path "$Path") {
        if ($Container -ne 'Session') {
            $containerMapping = @{
                Machine = [EnvironmentVariableTarget]::Machine
                User = [EnvironmentVariableTarget]::User
            }
            $containerType = $containerMapping[$Container]

            $persistedPaths = [Environment]::GetEnvironmentVariable('Path', $containerType) -split ';'
            if ($persistedPaths -notcontains $Path) {
                if ($Prepend) {
                    $persistedPaths = ,$Path + $persistedPaths | where { $_ }
                    [Environment]::SetEnvironmentVariable('Path', $persistedPaths -join ';', $containerType)
                }
                else {
                    $persistedPaths = $persistedPaths + $Path | where { $_ }
                    [Environment]::SetEnvironmentVariable('Path', $persistedPaths -join ';', $containerType)
                }
            }
        }

        $envPaths = $env:Path -split ';'
        if ($envPaths -notcontains $Path) {
            if ($Prepend) {
                $envPaths = ,$Path + $envPaths | where { $_ }
                $env:Path = $envPaths -join ';'
            }
            else {
                $envPaths = $envPaths + $Path | where { $_ }
                $env:Path = $envPaths -join ';'
            }
        }
    }
}

5

Come Jonathan Leaders ha menzionato qui , è importante eseguire il comando / script elevato per poter modificare le variabili di ambiente per "macchina" , ma l'esecuzione di alcuni comandi elevati non deve essere eseguita con le estensioni della comunità, quindi mi piacerebbe per modificare ed estendere la risposta di JeanT in un modo, anche il cambiamento delle variabili macchina può essere eseguito anche se lo script stesso non viene eseguito in modo elevato:

function Set-Path ([string]$newPath, [bool]$permanent=$false, [bool]$forMachine=$false )
{
    $Env:Path += ";$newPath"

    $scope = if ($forMachine) { 'Machine' } else { 'User' }

    if ($permanent)
    {
        $command = "[Environment]::SetEnvironmentVariable('PATH', $env:Path, $scope)"
        Start-Process -FilePath powershell.exe -ArgumentList "-noprofile -command $Command" -Verb runas
    }

}

5

La maggior parte delle risposte non riguarda il controllo dell'account utente . Questo riguarda i problemi di controllo dell'account utente.

Prima installa le estensioni della community di PowerShell: choco install pscxtramite http://chocolatey.org/ (potrebbe essere necessario riavviare l'ambiente della shell).

Quindi abilitare pscx

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser #allows scripts to run from the interwebs, such as pcsx

Quindi utilizzare Invoke-Elevated

Invoke-Elevated {Add-PathVariable $args[0] -Target Machine} -ArgumentList $MY_NEW_DIR

4

Il mio suggerimento è questo:

Ho provato questo per aggiungere permanentemente C:\oracle\x64\binalla variabile d'ambiente Pathe questo funziona bene.

$ENV:PATH

Il primo modo è semplicemente fare:

$ENV:PATH=”$ENV:PATH;c:\path\to\folder

Ma questo cambiamento non è permanente. $env:pathtornerà automaticamente a quello che era prima non appena chiudi il tuo terminale PowerShell e lo riapri di nuovo. Questo perché hai applicato la modifica a livello di sessione e non a livello di origine (che è il livello di registro). Per visualizzare il valore globale di $env:path, eseguire:

Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment -Name PATH

O più precisamente:

(Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment -Name PATH).path

Ora per cambiare questo, prima catturiamo il percorso originale che deve essere modificato:

$oldpath = (Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment -Name PATH).path

Ora definiamo come dovrebbe apparire il nuovo percorso. In questo caso stiamo aggiungendo una nuova cartella:

$newpath = $oldpath;c:\path\to\folder

Nota: assicurati che l' $newpathaspetto sia come desideri. Altrimenti, potresti danneggiare il tuo sistema operativo.

Ora applica il nuovo valore:

Set-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment -Name PATH -Value $newPath

Ora fai un controllo finale che assomigli a come ti aspetti che:

(Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment -Name PATH).Path

Ora puoi riavviare il tuo terminale PowerShell (o persino riavviare il computer) e vedere che non ripristina nuovamente il suo vecchio valore.

Nota che l'ordine dei percorsi può cambiare in modo che sia in ordine alfabetico, quindi assicurati di controllare l'intera linea. Per semplificare, puoi dividere l'output in righe usando i punti e virgola come delimitatore:

($env:path).split(“;”)

3

Apri PowerShell ed esegui:

[Environment]::SetEnvironmentVariable("PATH", "$ENV:PATH;<path to exe>", "USER")

1

All'interno di PowerShell, è possibile accedere alla directory delle variabili di ambiente digitando:

Set-Location Env:

Questo ti porterà alla directory Env:>. Da questa directory:

Per vedere tutte le variabili di ambiente, digitare:

Env:\> Get-ChildItem

Per visualizzare una variabile di ambiente specifica, digitare:

Env:\> $Env:<variable name>, e.g. $Env:Path

Per impostare una variabile di ambiente, digitare:

Env:\> $Env:<variable name> = "<new-value>", e.g. $Env:Path="C:\Users\"

Per rimuovere una variabile di ambiente, digitare:

Env:\> remove-item Env:<variable name>, e.g. remove-item Env:SECRET_KEY

Ulteriori informazioni sono disponibili in Informazioni sulle variabili di ambiente .


0

Ho cercato di ottimizzare un po ' il codice SBF e Michael per renderlo più compatto.

Mi affido alla coercizione del tipo di PowerShell in cui converte automaticamente le stringhe in valori di enum, quindi non ho definito il dizionario di ricerca.

Ho anche estratto il blocco che aggiunge il nuovo percorso all'elenco in base a una condizione, in modo che il lavoro venga svolto una volta e memorizzato in una variabile per il riutilizzo.

Viene quindi applicato in modo permanente o solo alla sessione in base al $PathContainerparametro.

Possiamo inserire il blocco di codice in una funzione o in un file ps1 che chiamiamo direttamente dal prompt dei comandi. Sono andato con DevEnvAddPath.ps1.

param(
    [Parameter(Position=0,Mandatory=$true)][String]$PathChange,

    [ValidateSet('Machine', 'User', 'Session')]
    [Parameter(Position=1,Mandatory=$false)][String]$PathContainer='Session',
    [Parameter(Position=2,Mandatory=$false)][Boolean]$PathPrepend=$false
)

[String]$ConstructedEnvPath = switch ($PathContainer) { "Session"{${env:Path};} default{[Environment]::GetEnvironmentVariable('Path', $containerType);} };
$PathPersisted = $ConstructedEnvPath -split ';';

if ($PathPersisted -notcontains $PathChange) {
    $PathPersisted = $(switch ($PathPrepend) { $true{,$PathChange + $PathPersisted;} default{$PathPersisted + $PathChange;} }) | Where-Object { $_ };

    $ConstructedEnvPath = $PathPersisted -join ";";
}

if ($PathContainer -ne 'Session') 
{
    # Save permanently to Machine, User
    [Environment]::SetEnvironmentVariable("Path", $ConstructedEnvPath, $PathContainer);
}

# Update the current session
${env:Path} = $ConstructedEnvPath;

Faccio qualcosa di simile per DevEnvRemovePath.ps1.

param(
    [Parameter(Position=0,Mandatory=$true)][String]$PathChange,

    [ValidateSet('Machine', 'User', 'Session')]
    [Parameter(Position=1,Mandatory=$false)][String]$PathContainer='Session'
)

[String]$ConstructedEnvPath = switch ($PathContainer) { "Session"{${env:Path};} default{[Environment]::GetEnvironmentVariable('Path', $containerType);} };
$PathPersisted = $ConstructedEnvPath -split ';';

if ($PathPersisted -contains $PathChange) {
    $PathPersisted = $PathPersisted | Where-Object { $_ -ne $PathChange };

    $ConstructedEnvPath = $PathPersisted -join ";";
}

if ($PathContainer -ne 'Session') 
{
    # Save permanently to Machine, User
    [Environment]::SetEnvironmentVariable("Path", $ConstructedEnvPath, $PathContainer);
}

# Update the current session
${env:Path} = $ConstructedEnvPath;

Finora sembrano funzionare.


0

Solo le risposte che inseriscono il valore nel registro influiscono su una modifica permanente (quindi la maggior parte delle risposte su questo thread, inclusa la risposta accettata, non influisce in modo permanente su Path).

La seguente funzione funziona sia per Path/ PSModulePathche per User/ Systemtipi. Aggiungerà inoltre il nuovo percorso alla sessione corrente per impostazione predefinita.

function AddTo-Path {
    param ( 
        [string]$PathToAdd,
        [Parameter(Mandatory=$true)][ValidateSet('System','User')][string]$UserType,
        [Parameter(Mandatory=$true)][ValidateSet('Path','PSModulePath')][string]$PathType
    )

    # AddTo-Path "C:\XXX" "PSModulePath" 'System' 
    if ($UserType -eq "System" ) { $RegPropertyLocation = 'HKLM:\System\CurrentControlSet\Control\Session Manager\Environment' }
    if ($UserType -eq "User"   ) { $RegPropertyLocation = 'HKCU:\Environment' } # also note: Registry::HKEY_LOCAL_MACHINE\ format
    $PathOld = (Get-ItemProperty -Path $RegPropertyLocation -Name $PathType).$PathType
    "`n$UserType $PathType Before:`n$PathOld`n"
    $PathArray = $PathOld -Split ";" -replace "\\+$", ""
    if ($PathArray -notcontains $PathToAdd) {
        "$UserType $PathType Now:"   # ; sleep -Milliseconds 100   # Might need pause to prevent text being after Path output(!)
        $PathNew = "$PathOld;$PathToAdd"
        Set-ItemProperty -Path $RegPropertyLocation -Name $PathType -Value $PathNew
        Get-ItemProperty -Path $RegPropertyLocation -Name $PathType | select -ExpandProperty $PathType
        if ($PathType -eq "Path") { $env:Path += ";$PathToAdd" }                  # Add to Path also for this current session
        if ($PathType -eq "PSModulePath") { $env:PSModulePath += ";$PathToAdd" }  # Add to PSModulePath also for this current session
        "`n$PathToAdd has been added to the $UserType $PathType"
    }
    else {
        "'$PathToAdd' is already in the $UserType $PathType. Nothing to do."
    }
}

# Add "C:\XXX" to User Path (but only if not already present)
AddTo-Path "C:\XXX" "User" "Path"

# Just show the current status by putting an empty path
AddTo-Path "" "User" "Path"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.