0%

PowerShell入门:变量

概述

PowerShell 变量语法为:$variable${variable}

变量类型是宽松的,非必要可不声明类型。类型声明形式为:[int]$number=42

变量名大小写不敏感,可包含空格和特殊字符。

当变量名包含空格或特殊字符时,需要用花括号将变量名包围,如:${my var},甚至需要对特殊字符进行转义,${my`{var`}}

鉴于难以使用,所以通常不会这样命名变量。

变量不必事先声明,默认值为 $null

可参考 这里

变量类型可参考 这里

常规操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建变量
New-Variable -Name number -Value 42
$number = 42
# 清楚变量值
Clear-Variable -Name number
$number = $null
# 修改变量值
Set-Variable -Name number 43
$number = 43
# 删除变量
Remove-Variable -Name number
Remove-Item -Path Variable:\number
# 位置转换到变量驱动器
Set-Location Variable:
# 查看所有变量
Get-Variable [-Scope <Global | Local* | Script | number>]
Get-ChildItem Variable:

变量类型

PowerShell 变量分为 3 种:

  • 用户创建的变量(user-created variable),由用户创建并维护。
  • 自动变量(automatic variable),PowerShell 自行创建,存储自身状态。
  • 偏好变量(preference variable),PowerShell 创建,存储用户偏好,可配置。

自动变量

PowerShell 中自动变量非常多,这里挑几个常用的说说。

$?,记录上次操作成功与否(布尔值)。常用于判断操作是否出现异常。

$_,等价于 $PSItem,代表当前对象,通常用于管道、循环等中。

$PSItem 是 PowerShell 3.0 加入的,但 $_ 向后兼容且简洁仍被大量使用。

$args,数组,包含所有未声明的参数。

$PSBoundParameters,字典,包含所有声明参数的“键-值”对。

$Error,数组,包含最近的异常。

注意,$true$false$null 都是自动变量。

偏好变量

也有很多偏好变量,最常见看的应该是 $ErrorActionPreference,它控制默认的非终端异常的行为。

作用域

PowerShell 作用域可以是具名的(绝对作用域)也可以数字化的(相对作用域) :

  • 全局域(Global)
  • 本地域(Local),可能是 global 作用域或其他任何作用域
  • 脚本域(Script)
  • 私有域(Private)
  • 数字域(Number),Scope 0 代表当前作用域,向父级回溯一层数字加 1。

默认 PowerShell 解释器会自动处理和限制变量作用域。但也可以指定作用域修饰符,语法如下:

1
$[<scope-modifier>:]<name> = <value>

作用域修饰符同样适用于函数:

1
function [<scope-modifier>:]<name> {<function-body>}

脚本默认作用域是脚本域,函数和别名的默认作用域是本地域。

参考

链接

MS Doc - About Variables

MS Doc - About Automatic Variables

MS Doc - About Preference Variables

MS Doc - About Scopes