Sometimes you discover that there are many duplicates in your Path environment variable. This happens because most of the software you install just add new paths without formerly checking if they already exist.
How to do it with Powershell
First, we want to get the current content of the Path environment variable.
$CurrentPath = [Environment]::GetEnvironmentVariable('Path','Machine')
Now we want to split this whole string into an array of paths.
$SplittedPath = $CurrentPath -split ';'
We can then remove all duplicate elements with the -Unique
parameter of either the Select-Object
or the Sort-Object
cmdlet. Personally, I find it more interesting in this case to use the Sort-Object
cmdlet. However, it doesn’t really matter, if this list is unsorted.
$CleanedPath = $SplittedPath | Sort-Object -Unique
Now we want to join everything together and make a unique whole string again.
$NewPath = $CleanedPath -join ';'
And last step is to set the Path environment variable with new value.
[Environment]::SetEnvironmentVariable('Path', $NewPath,'Machine')
The whole script looks like this
$CurrentPath = [Environment]::GetEnvironmentVariable('Path','Machine') $SplittedPath = $CurrentPath -split ';' $CleanedPath = $SplittedPath | Sort-Object -Unique $NewPath = $CleanedPath -join ';' [Environment]::SetEnvironmentVariable('Path', $NewPath,'Machine')
Onliner bonus
If you are fan of oneliners, here is a possibility
[Environment]::SetEnvironmentVariable('Path',(([Environment]::GetEnvironmentVariable('Path','Machine') -split ';'|Sort-Object -Unique) -join ';'),'Machine')
And don’t forget
All currently running processes are still using the old value of the Path environment variable. Thus it is better to close everything and reopen it again, or just logoff and logon again.