PowerShell 变量是什么
变量以美元符号开头,赋值时不需要声明类型,写什么就存什么,这是 PowerShell 用起来轻松的地方,也是容易出错的根源。给变量加上类型约束后,后续每次赋值都会按该类型校验与转换,转换失败会直接报错,等于把隐式转换的隐患提前暴露。变量名不区分大小写,作用域分脚本、函数与全局等层级。理解类型转换与作用域这两件事,脚本里「数值莫名其妙变成字符串」或「函数里改了外面却没变」的问题就都能解释。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 及以上 |
|---|---|
| 语法 | $变量 = 值;[类型]$变量 = 值;$变量.GetType().Name 查看实际类型 |
| 常用类型 | 整数、双精度、字符串、日期时间、布尔、数组、哈希表 |
| 类型约束 | 在变量名前写方括号加类型名,之后赋值都会走校验与转换 |
| 作用域 | 脚本级、函数级、全局;函数内默认不影响外部同名变量 |
| 命名注意 | 变量名不区分大小写,靠大小写区分含义是不可行的 |
典型使用场景
- 保存命令结果供后续环节反复使用,避免重复执行耗时查询
- 用类型约束固定端口号、计数等关键数值,防止被字符串污染
- 把常用路径与阈值定义成变量,便于脚本统一调整
- 用哈希表作为参数集合,把一组选项整体传给命令
- 用数组保存主机列表,配合循环批量处理
- 用日期类型保存时间点,直接做差得到运行时长
常用示例
常用示例
# 普通赋值
$count = 10
# 类型约束:之后赋值必须能转成整数
[int]$port = 8080
# 日期类型,便于做时间差
$begin = [datetime]'2026-10-01'
$days = (Get-Date) - $begin
# 查看实际类型,排查类型问题
$count.GetType().Name
# 数组与哈希表
$hosts = 'web01','web02'
$cfg = @{ LogPath = 'D:\Logs'; Keep = 7 }
# 输出变量内容与类型
$cfg.Keep; $hosts.Count常见类型与转换
| 类型 | 写法示例 | 说明 |
|---|---|---|
| 整数 | [int]$n = 5 | 小数会被截断,字符串需能解析为数字 |
| 双精度 | [double]$r = 0.25 | 适合比值与容量换算 |
| 字符串 | [string]$s = 'text' | 单引号字面量,双引号会展开变量 |
| 日期时间 | [datetime]'2026-10-01' | 可直接做差得到时间间隔 |
| 布尔 | [bool]$ok = $true | 常用于条件判断的显式约束 |
| 数组 | $a = 1,2,3 | 单元素时也是数组,用计数属性区分 |
弱类型下的隐式转换是常见陷阱:字符串与数字相加会先转成字符串再拼接,做数值运算前应确认两端都是数字类型,必要时显式转换。
函数内给变量赋值默认只影响函数作用域,不会改变外部的同名变量。需要把结果带出来时,用返回值或明确指定作用域,别指望外部变量被自动修改。