EnvVarManager.psm1

<#
.SYNOPSIS
Gets one or all environment variables for the specified scope.
 
.DESCRIPTION
The Get-EnvironmentVariable function retrieves the value of an environment variable for the current user or the local machine. If no name is provided, it returns all environment variables for the specified scope.
 
.PARAMETER Name
The name of the environment variable to retrieve. If not specified, all environment variables for the scope are returned.
 
.PARAMETER Scope
Specifies the scope of the environment variable. Valid values are "User" and "Machine". The default is "Machine".
 
.EXAMPLE
Get-EnvironmentVariable -Name PATH -Scope User
 
Gets the value of the PATH environment variable for the current user.
 
.EXAMPLE
Get-EnvironmentVariable -Scope Machine
 
Gets all environment variables for the local machine.
#>

function Get-EnvironmentVariable {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$false)]
        [string]$Name,

        [Parameter(Mandatory=$false)]
        [ValidateSet("User", "Machine")]
        [string]$Scope = "Machine"
    )

    If ($Name) {
        [System.Environment]::GetEnvironmentVariable($Name, $Scope)
    }
    else {
        [System.Environment]::GetEnvironmentVariables($Scope)
    }
}

<#
.SYNOPSIS
Sets an environment variable for the specified scope.
 
.DESCRIPTION
The Set-EnvironmentVariable function creates or modifies an environment variable for the current user or the local machine.
 
.PARAMETER Name
The name of the environment variable to set.
 
.PARAMETER Value
The value to assign to the environment variable.
 
.PARAMETER Scope
Specifies the scope of the environment variable. Valid values are "User" and "Machine". The default is "Machine".
 
.EXAMPLE
Set-EnvironmentVariable -Name MY_VARIABLE -Value "MyValue" -Scope User
 
Sets the MY_VARIABLE environment variable to "MyValue" for the current user.
#>

function Set-EnvironmentVariable {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true)]
        [string]$Name,

        [Parameter(Mandatory=$true)]
        [string]$Value,

        [Parameter(Mandatory=$false)]
        [ValidateSet("User", "Machine")]
        [string]$Scope = "Machine"
    )

    [System.Environment]::SetEnvironmentVariable($Name, $Value, $Scope)
    Write-Output "Environment variable `'$Name`' set to `'$Value`' for `'$Scope`' scope."
}

<#
.SYNOPSIS
Removes an environment variable from the specified scope.
 
.DESCRIPTION
The Remove-EnvironmentVariable function deletes an environment variable for the current user or the local machine.
 
.PARAMETER Name
The name of the environment variable to remove.
 
.PARAMETER Scope
Specifies the scope of the environment variable. Valid values are "User" and "Machine". The default is "Machine".
 
.EXAMPLE
Remove-EnvironmentVariable -Name MY_VARIABLE -Scope User
 
Removes the MY_VARIABLE environment variable for the current user.
#>

function Remove-EnvironmentVariable {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true)]
        [string]$Name,

        [Parameter(Mandatory=$false)]
        [ValidateSet("User", "Machine")]
        [string]$Scope = "Machine"
    )

    [System.Environment]::SetEnvironmentVariable($Name, $null, $Scope)
    Write-Output "Environment variable `'$Name`' removed from `'$Scope`' scope."
}