函数是什么
function 用来封装可复用的逻辑。PowerShell 函数的关键特点是:函数体内所有没有被消费的输出都会成为返回值,return 只是提前结束函数,并不是唯一的返回途径。这一点与多数编程语言不同,也是新手最容易踩的坑。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 |
|---|---|
| 语法 | function 名称 { param($a) 函数体 } |
| 高级函数 | 函数体内加 [CmdletBinding()] 即获得 -Verbose、-WhatIf、-ErrorAction 等通用参数 |
| 参数写法 | param([string]$Path='C:\') 可带类型约束与默认值 |
| 返回规则 | 所有输出流内容都进入返回值,return 只负责提前结束 |
| 命名建议 | 动词-名词格式,如 Get-、Set-、Test- |
典型使用场景
- 把重复出现的检查逻辑抽成函数,在多处调用
- 给运维脚本加参数化入口,用参数控制目标与行为开关
- 封装会输出多个对象的逻辑,方便用管道继续处理
- 编写带 -Verbose 日志的高级函数,排障时打开细节
- 把常用小工具收进个人模块,长期复用
常用示例
常用示例
function Get-DiskFree {
param([string]$Drive = 'C')
# 只输出一个数值,避免其他内容混进返回值
(Get-PSDrive -Name $Drive).Free / 1GB
}
Get-DiskFree
Get-DiskFree -Drive D
# 高级函数:自动获得 -Verbose 等通用参数
function Test-Port {
[CmdletBinding()]
param([string]$Computer, [int]$Port = 443)
Write-Verbose "测试 $Computer 的 $Port 端口"
[bool](Test-NetConnection $Computer -Port $Port -InformationLevel Quiet)
}
Test-Port -Computer 10.0.0.8 -Port 80 -Verbose常见写法与作用
| 写法 | 作用 | 注意 |
|---|---|---|
| param(...) | 声明函数参数 | 单个参数时可省略括号 |
| [CmdletBinding()] | 把函数升级为高级函数 | 自动获得通用参数 |
| Write-Verbose | 输出细节日志 | 默认不显示,需加 -Verbose |
| Out-Null 或赋值 | 抑制中间命令的输出 | 防止污染返回值 |
| $args | 未声明参数的自变量数组 | 正式脚本不建议依赖它 |
想让函数只返回一件事,就把中间命令的输出写进变量、把日志改用 Write-Verbose、或对不需要的结果用 Out-Null 丢弃,否则调用方拿到的是混合数组。
函数名遵循动词-名词格式不只是风格问题,还能用 Get-Verb 校验动词是否合法,并降低与内置命令重名导致行为被覆盖的风险。