CDSoftware/EnvVar.ps1
function ValidateEnvVarName($Name) { if ($Name -in 'Path', 'TEMP', 'TMP', 'ComSpec', 'DriverData', 'NUMBER_OF_PROCESSORS', 'OS', 'PATHEXT', 'POWERSHELL_DISTRIBUTION_CHANNEL', 'PROCESSOR_ARCHITECTURE', 'PROCESSOR_IDENTIFIER', 'PROCESSOR_LEVEL', 'PROCESSOR_REVISION', 'PSModulePath', 'USERNAME', 'windir') { throw "You cannot edit important EnvVar: $Name." } } function ConvertVarType($VarType) { if (($VarType -eq 'User') -or ($VarType -eq 'Machine')) { return $VarType } elseif ($VarType -eq 0) { return 'Machine' } elseif ($VarType -eq 1) { return 'User' } else { throw "VarType $VarType is wrong. Can only be among 4 kinds of value: Machine (or 0) User (or 1)" } } function Set-SystemEnvVar { <# .SYNOPSIS ���»������û���ϵͳ����������ֵ�����õأ��� .DESCRIPTION ���»������û���ϵͳ����������ֵ�����õأ���������ڣ�����£���������ڣ������á� .PARAMETER Name �������������� .PARAMETER Value ֵ .PARAMETER VarType �������������ͣ�����Ϊ��������ֵ��User Machine 1 (= User) 0 (= Machine) .EXAMPLE Set-SystemEnvVar OneDriveB E:/OneDriveB .OUTPUTS void #> [CmdletBinding()] PARAM( [parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [String] $Name, [parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [String] $Value, [String] $VarType = "User" ) BEGIN { ValidateEnvVarName $Name $VarType = ConvertVarType $VarType } PROCESS { $oldValue = [System.Environment]::GetEnvironmentVariable($Name) if ($Value -eq $oldValue) { Write-Verbose "δ���� $VarType ���͵Ļ������� $Name����Ϊ��ͬ��ֵ�Ѵ��ڡ�" return } Set-Item -Path "env:$Name" -Value $Value [Environment]::SetEnvironmentVariable($Name, $Value, $VarType) if ($oldValue -eq $null) { Write-Verbose "�ѽ� $VarType ���͵Ļ������� $Name ��ֵ���������ڣ�����Ϊ $Value��" } else { Write-Verbose "�ѽ� $VarType ���͵Ļ������� $Name ��ֵ����Ϊ $Value��" } return } } function Add-PathEnvVar { <# .SYNOPSIS ���Խ�һ��·����ӵ� PATH ���������С� .DESCRIPTION ���Խ�һ��·����ӵ� PATH ���������С� .PARAMETER Path �������������� .PARAMETER VarType �������������ͣ�����Ϊ��������ֵ��User Machine 1 (= User) 0 (= Machine) .EXAMPLE Add-PathEnvVar -Path E:\Temp -VarType User .EXAMPLE Add-PathEnvVar -Path E:\Temp .OUTPUTS void #> [CmdletBinding()] PARAM( [parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true)] [String] $Path, [String] $VarType = "User" ) BEGIN { $VarType = ConvertVarType $VarType $Path = $Path.Replace('/', '\').TrimEnd('\') } PROCESS { $allPath = [System.Environment]::GetEnvironmentVariable('Path', $VarType) if ($allPath -like "*$Path*") { Write-Verbose "δ�� $VarType ���͵� Path �����������·�� $Path����Ϊ���Ѵ��ڡ�" } else { $allPath += ';' $allPath += $Path Set-Item -Path "env:Path" -Value $allPath [Environment]::SetEnvironmentVariable('Path', $allPath, $VarType) Write-Verbose "���� $VarType ���͵� Path �����������·�� $Path��" } } } |