Script to check for duplicate paths in PATH environment variable

Introduction

Sometimes repeated installation of software can add duplicate entries into the PATH environment variable. Since environment variable has a  there is a hard coded limit in the size of this variable, there are chances that you may it that limit over a period of time. This script checks the PATH environment variable and removes any duplicate path entries.

Scenarios:

This script was originally developed to check and remove duplicate paths in the PATH system environment variable.

Faulty software installers may add duplicate paths to the PATH environment variable. Also, there is a known bug associated with http://support2.microsoft.com/kb/2823180 - This KB adds an extra string :  “%systemroot%\System32\WindowsPowerShell\v1.0\“ to the PATH environment variable. As a result the length of the PATH variable may reach close to the 32,767 limit. In some cases applications that try to add additional paths may fail. The issue can be resolved by simply removing the duplicate entries from the PATH variable.

Script


Usage:       powershell.exe -NoProfile -ExecutionPolicy Bypass -File RemoveDupfromPATH.ps1
 
PowerShell
Edit|Remove
#---------------------------------------------------------------------------  
 
#The sample scripts are not supported under any Microsoft standard support  
 
#program or service. The sample scripts are provided AS IS without warranty   
 
#of any kind. Microsoft further disclaims all implied warranties including,   
 
#without limitation, any implied warranties of merchantability or of fitness for  
 
#a particular purpose. The entire risk arising out of the use or performance of   
 
#the sample scripts and documentation remains with you. In no event shall  
 
#Microsoft, its authors, or anyone else involved in the creation, production, or  
 
#delivery of the scripts be liable for any damages whatsoever (including,  
 
#without limitation, damages for loss of business profits, business interruption,  
 
#loss of business information, or other pecuniary loss) arising out of the use  
 
#of or inability to use the sample scripts or documentation, even if Microsoft  
 
#has been advised of the possibility of such damages  
 
#---------------------------------------------------------------------------  
 
 
 
  
 
$RegKey = ([Microsoft.Win32.Registry]::LocalMachine).OpenSubKey("SYSTEM\CurrentControlSet\Control\Session Manager\Environment"$True) 
 
$PathValue = $RegKey.GetValue("Path"$Null"DoNotExpandEnvironmentNames") 
 
Write-host "Original path :" + $PathValue  
 
$PathValues = $PathValue.Split(";", [System.StringSplitOptions]::RemoveEmptyEntries) 
 
$IsDuplicate = $False 
 
$NewValues = @() 
 
  
 
ForEach ($Value in $PathValues) 
 
{ 
 
    if ($NewValues -notcontains $Value) 
 
    { 
 
        $NewValues +$Value 
 
    } 
 
    else 
 
    { 
 
        $IsDuplicate = $True 
 
    } 
 
} 
 
  
 
if ($IsDuplicate) 
 
{ 
 
    $NewValue = $NewValues -join ";" 
 
    $RegKey.SetValue("Path"$NewValue, [Microsoft.Win32.RegistryValueKind]::ExpandString) 
 
    Write-Host "Duplicate PATH entry found and new PATH built removing all duplicates. New Path :" + $NewValue 
 
} 
 
else 
 
{ 
 
    Write-Host "No Duplicate PATH entries found. The PATH will remain the same." 
 
} 
 
  
 
$RegKey.Close()