PowershellModulePath.psm1
#region Get-ModulePath Function Get-ModulePath { Param ( [switch]$AsString, [switch]$Active ) # Get current PATH $CurrentPath=(Get-ItemProperty -Path ‘Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment’ -Name PSModulePath).PSModulePath if($AsString) { if( $Active ) { return $env:PSModulePath } else { return $CurrentPath } } else { $directories = @() if($Active) { $directories = $env:PSModulePath.Split(';') } else { $directories = $currentpath.Split(';') } foreach($d in $directories) { $obj = New-Object psobject $obj | Add-Member -MemberType NoteProperty -Name Path -Value $d $obj } } } #endregion #region Add-ModulePath Function Add-ModulePath { Param ( [parameter( Mandatory=$True, ValueFromPipeline=$True, Position=0 )] [String[]]$Path, [Switch]$ActiveSessionOnly ) # Get the current PATH $currentPathDirectories = @() if( $ActiveSessionOnly ) { $currentPathDirectories = Get-ModulePath -Active } else { $currentPathDirectories = Get-ModulePath } foreach($p in $Path) { # Test if folder to be added to the PATH exists If( !(Test-Path $p)) { Write-Error ("Folder " + $p + " does not exist!") continue } # Test if the folder already exists in the PATH foreach($d in $currentPathDirectories) { if( $d.Path -eq $p ) { Write-Error ("Folder " + $p + " already exists in module path!") continue } } if( $ActiveSessionOnly ) { $env:PSModulePath = $env:PSModulePath + ";" + $p } else { # Form the New Path $CurrentPath = Get-ModulePath -AsString $NewPath=$CurrentPath+’;’+$p # Set the new path Set-ItemProperty -Path ‘Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment’ -Name PSModulePath –Value $newPath } } } #endregion #region Remove-ModulePath function Remove-ModulePath { Param ( [parameter( Mandatory=$True, ValueFromPipeline=$True, Position=0 )] [String[]]$Path, [switch]$ActiveSessionOnly ) # Get the current PATH [string]$CurrentPath = "" [string]$newPath = "" $currentPathDirectories = @() if($ActiveSessionOnly) { $currentPathDirectories = Get-ModulePath -Active } else { $currentPathDirectories = Get-ModulePath } foreach($p in $Path) { # Test if the folder exists in the PATH $found = 0 foreach($d in $currentPathDirectories) { if( $d.Path -eq $p ) { $found = 1 break } } if($found -eq 0) { Write-Error ("Folder " + $p + " does not exist in PATH") continue } } # Form the New Path foreach($d in $currentPathDirectories) { if(!$Path.Contains($d.path)) { $newpath += $d.path + ";" } } # Remove the last ";" $newPath = $newPath.Remove($newPath.Length - 1) # Set the new path Set-ItemProperty -Path ‘Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment’ -Name PSModulePath –Value $newPath } #endregion |