PowerShell 变量

概述

参考:

PowerShell 变量名称不区分大小写,可以包含空格和特殊字符。但是官方推荐尽量避免使用空格和特殊字符,使用起来很麻烦,详见包含特殊字符的变量名称

PowerShell 中的环境变量局部变量在声明方式和引用方式上有明显不同,这与 Bash 变量 不太一样。举一个非常简单的例子:

PS C:\Users\DesistDaydream> $test_var="这是一个普通变量"
PS C:\Users\DesistDaydream> $test_var
这是一个普通变量
PS C:\Users\DesistDaydream> $env:test_var

PS C:\Users\DesistDaydream> $env:test_env_var="这是一个环境变量"
PS C:\Users\DesistDaydream> $test_env_var
PS C:\Users\DesistDaydream> $env:test_env_var
这是一个环境变量

局部变量

PowerShell 中有几种不同类型的变量:

  • User-created variables(用户创建的变量) # 用户创建的变量由用户创建和维护。 默认情况下,仅在 PowerShell 窗口打开时,在 PowerShell 命令行中创建的变量才存在。 关闭 PowerShell 窗口时,将删除变量。 若要保存变量,请将其添加到 PowerShell 配置文件。 还可以在具有全局、脚本或本地范围的脚本中创建变量。
  • Automatic variables(自动变量) # 自动变量存储 PowerShell 的状态。 这些变量由 PowerShell 创建,PowerShell 会根据需要更改其值,以保持其准确性。 用户无法更改这些变量的值。 例如,变量 $PSHOME 存储 PowerShell 安装目录的路径。
  • Preference variables(首选项变量) # 首选项变量存储 PowerShell 的用户首选项。 这些变量由 PowerShell 创建,并使用默认值填充。 用户可以更改这些变量的值。 例如,变量 $MaximumHistoryCount 确定会话历史记录中的最大条目数。

自动变量

描述存储 PowerShell 的状态信息的变量。 这些变量由 PowerShell 创建和维护。

$? # 最后一个命令的执行状态。如果最后一个命令成功,值为 True,如果失败,值为 False

$HOME # 用户家目录的绝对路径。此变量使用 $env:USERPROFILE 环境变量的值。

$PSHOME # PowerShell 安装目录的绝对路径。

$PWD # 当前 PowerShell 运行时所在目录位置的绝对路径。每次执行 cd 命令都会更新该变量的值。

首选项变量

自定义 PowerShell 行为的变量。

环境变量

参考:

环境变量存储操作系统和其他应用程序使用的数据。在 PowerShell 中,我们可以引用 WindowsShell 变量 中的环境变量。

在 PowerShell 中,环境变量分为 3 个作用域

  • 系统范围
  • 用户范围
  • 进程范围

我们在 PowerShell 声明的环境变量通常都是进程范围的,对于系统和用户作用范围,通常就是指永久声明环境变量。

当我们想要在系统和用户作用域中永久声明环境变量时,可以使用 Machine 表示系统作用域,使用 User 表示用户作用域;也可以在 GUI 上找到 控制面板-系统-高级系统设置-高级-环境变量 处修改。

声明变量

  • 普通变量: $VAR_NAME=VALUE
  • 环境变量: $env:VAR_NAME=VALUE

引用变量

  • 普通变量: $VAR_NAME${VAR_NAME}
  • 环境变量: $env:VAR_NAME${env:VAR_NAME}

想要获取变量,有几下几种方式:

  • Get-Item Env:*
  • ls env:
  • Get-Variable

变量管理工具

在 PowerShell 中,变量也可以称为一个 Item,因此可以由大多数与 Item 相关的 cmdlet 命令控制

PowerShell 自带的变量

这些环境变量通常都是 WindowsShell 变量

  • PATH # 包含操作系统搜索可执行文件的文件夹位置的列表。
  • PATHEXT # 包含 Windows 视为可执行文件的文件扩展名列表。
  • XDG # XDG 基本目录规范定义的 XDG 环境变量
    • XDG_CONFIG_HOME
    • XDG_DATA_HOME
    • XDG_CACHE_HOME

最佳实践

切割 PATH 变量

  • (type env:path) -split ';' # 切割字符串,将 ; 替换为换行符。方便查看

永久设置系统或用户范围的环境变量

设置和取消系统或用户范围的环境变量:

# 设置
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
# 取消
[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')
# 设置
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'User')
# 取消
[Environment]::SetEnvironmentVariable('Foo', '', 'User')

设置代理

PowerShell

  • $env:HTTPS_PROXY="http://127.0.0.1:7890"

最后修改 March 21, 2024: tailscale (6577db26)