about_Environment_Variables

应用到: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

主题

about_Environment_Variables

简短说明

介绍如何访问 Windows PowerShell® 中的 Windows 环境变量。

详细说明

环境变量存储有关操作系统环境的信息。此信息包括操作系统路径、操作系统所使用的处理器数以及临时文件夹的位置等详细信息。

环境变量存储操作系统和其他程序所使用的数据。例如,WINDIR 环境变量包含 Windows 安装目录的位置。程序可以查询此变量的值,以确定 Windows 操作系统文件所在的位置。

Windows PowerShell 可使你查看和更改 Windows 环境变量,其中包括在注册表中设置的变量以及针对特定会话设置的变量。Windows PowerShell 环境提供程序通过简化查看和更改环境变量的操作来简化此过程。

和 Windows PowerShell 中的其他类型的变量不同,环境变量及其值由子会话继承,如本地后台作业和在其中运行模块成员的会话。这使环境变量更适用于存储父会话和子会话中同时需要的值。

WINDOWS POWERSHELL 环境提供程序

Windows PowerShell 环境提供程序使你能够访问 Windows PowerShell 中的 Windows 环境变量,它位于 Windows PowerShell 驱动器(Env:驱动器)中。此驱动器看起来很像文件系统驱动器。若要转到 Env:驱动器,请键入:

  Set-Location Env:

然后,若要显示 Env:驱动器的内容,请键入:

  Get-ChildItem

你可以从任何其他Windows PowerShell 驱动器查看 Env: 驱动器中的环境变量,并且可以转到 Env:驱动器以查看和更改环境变量。

环境变量对象

在 Windows PowerShell 中,每个环境变量由作为 System.Collections.DictionaryEntry 类的实例的对象表示。

在每个 DictionaryEntry 对象中,环境变量的名称是字典键。该变量的值是字典值。

若要显示 Windows PowerShell 中的环境变量,请获取表示该变量的对象,然后显示对象属性的值。当你更改 Windows PowerShell 中的环境变量时,请使用与 DictionaryEntry 对象相关联的方法。

若要显示表示 Windows PowerShell 中的环境变量的对象的属性和方法,请使用 Get-Member cmdlet。例如,若要显示 Env:驱动器中所有对象的方法和属性,请键入:

  Get-Item -Path Env:* | Get-Member

显示环境变量

可以使用包含 Item 名词的 cmdlet (Item cmdlet) 来显示和更改环境变量的值。由于环境变量没有子项,因此 Get-Item 和 Get-ChildItem 的输出相同。

如果你引用环境变量,请键入 Env:驱动器名称,后跟变量名称。例如,若要显示 COMPUTERNAME 环境变量的值,请键入:

  Get-Childitem Env:Computername

若要显示所有环境变量的值,请键入:

  Get-ChildItem Env:

默认情况下,Windows PowerShell 以检索到环境变量的顺序显示环境变量。若要按变量名称为环境变量的列表排序,请将 Get-ChildItem 命令的输出通过管道发送到 Sort-Object cmdlet。例如,从任何 Windows PowerShell 驱动器中,键入:

  Get-ChildItem Env: | Sort Name

你还可以使用 Set-Location cmdlet 转到 Env:驱动器:

  Set-Location Env:

当你在 Env:驱动器中时,可以从路径中省略 Env:驱动器名称。例如,若要显示所有环境变量,请键入:

  Get-ChildItem

若要从 Env:驱动器内显示 COMPUTERNAME 变量的值,请键入:

  Get-ChildItem ComputerName

你还可以在不使用 cmdlet 的情况下通过使用 Windows PowerShell 中的表达式分析程序来显示和更改环境变量的值。若要显示环境变量的值,请使用以下语法:

  $Env:<variable-name>

例如,若要显示 WINDIR 环境变量的值,请在 Windows PowerShell 命令提示符中键入以下命令:

  $Env:windir

在此语法中,美元符号 ($) 指示变量,而驱动器名称指示环境变量。

更改环境变量

若要对环境变量进行永久更改,请使用“控制面板”中的“系统”(“高级”选项卡或“高级系统设置”项)将更改存储在注册表中。

当你更改 Windows PowerShell 中的环境变量时,该更改仅影响当前会话。此行为类似于基于 Windows 的环境中的 Set 命令和基于 UNIX 的环境中的 Setenv 命令的行为。

你还必须具有更改这些变量值的权限。如果尝试在没有足够权限的情况下更改某个值,则命令将失败,并且 Windows PowerShell 将显示错误。

你可以在不使用 cmdlet 的情况下通过使用以下语法更改这些变量值:

          $Env:<variable-name> = "<new-value>"

例如,若要将“;c:\temp”附加到 Path 环境变量的值,请使用以下语法:

  $Env:path = $env:path + ";c:\temp"

你还可以使用 Item cmdlet(如 Set-item、Remove-Item 和 Copy-Item)来更改环境变量的值。例如,若要使用 Set-Item cmdlet 将“;c:\temp”附加到 Path 环境变量的值,请使用以下语法:

          Set-Item -Path Env:Path -Value ($Env:Path + ";C:\Temp")

在此命令中,该值括在括号中,以便将其解释为一个单元。

将更改保存到环境变量

若要在每个 Windows PowerShell 会话中创建或更改环境变量的值,请将更改添加到 Windows PowerShell 配置文件。

例如,若要在每个 Windows PowerShell 会话将 C:\Temp 目录添加到 Path 环境变量,请将以下命令添加到 Windows PowerShell 配置文件。

  $Env:Path = $Env:Path + ";C:\Temp"

若要将命令添加到现有配置文件(例如 CurrentUser,AllHosts 配置文件),请键入:

  Add-Content -Path $Profile.CurrentUserAllHosts -Value '$Env:Path = $Env:Path + ";C:\Temp"'

存储首选项的环境变量

Windows PowerShell 功能可以使用环境变量来存储用户首选项。这些变量的工作方式与首选项变量类似,但它们由创建它们的会话中的子会话继承。有关首选项变量的详细信息,请参阅 about_preference_variables。

存储首选项的环境变量包括:

PSEXECUTIONPOLICYPREFERENCE

存储为当前会话设置的执行策略。此环境变量仅在你为单个会话设置执行策略时存在。你可以通过两种不同方式执行此操作。

-- 使用 PowerShell.exe 在命令行启动会话,并使用其 ExecutionPolicy 参数来为会话设置执行策略。

-- 使用 Set-ExecutionPolicy cmdlet。使用值为“Process”的 Scope 参数。

有关详细信息,请参阅 about_Execution_Policies。

PSMODULEPATH

存储默认模块目录的路径。当你未指定模块的完整路径时,Windows PowerShell 将在指定目录中查找模块。

$Env:PSModulePath 的默认值为:

                $home\Documents\WindowsPowerShell\Modules; $pshome\Modules

Windows PowerShell 在注册表中设置“$pshome\Modules”的值。每次你启动 Windows PowerShell 时,它会设置“$home\Documents\WindowsPowerShell\Modules”的值。

此外,将模块安装到其他目录(如“程序文件”目录)的安装程序可将其位置附加到 PSModulePath 的值。

若要为当前会话更改默认模块目录,请使用以下命令格式更改 PSModulePath 环境变量的值。

例如,若要将“C:\Program Files\Fabrikam\Modules”目录添加到 PSModulePath 环境变量的值,请键入:

                $Env:PSModulePath = $Env:PSModulePath + ";C:\Program Files\Fabrikam\Modules"

命令中的分号 (;) 用于分隔列表中的新路径和新路径之前的路径。

若要在每个会话中更改 PSModulePath 的值,请将以前的命令添加到 Windows PowerShell 配置文件或使用 Environment 类的 SetEnvironmentVariable 方法。

以下命令使用 GetEnvironmentVariable 方法获取 PSModulePath 的计算机设置,并使用 SetEnvironmentVariable 方法将 C:\Program Files\Fabrikam\Modules 路径添加到该值。

$path = [System.Environment]::GetEnvironmentVariable("PSModulePath", "Machine")
            [System.Environment]::SetEnvironmentVariable("PSModulePath", $path + `
               ";C:\Program Files\Fabrikam\Modules", "Machine")

若要添加用户设置的路径,请将目标值更改为 User。

            $path = [System.Environment]::GetEnvironmentVariable("PSModulePath", "User")
            [System.Environment]::SetEnvironmentVariable("PSModulePath", $path + `
               ";$home\Documents\Fabrikam\Modules", "User")

有关 System.Environment 类的方法的详细信息,请参阅 MSDN 中的“环境方法”,网址是 https://go.microsoft.com/fwlink/?LinkId=242783。

你还可以添加一个命令,该命令将该值更改为你的配置文件,或使用“控制面板”中的“系统”更改注册表中 PSModulePath 环境变量的值。

有关详细信息,请参阅 about_Modules。

另请参阅

Environment(提供程序)

about_Modules