通用参数是什么
通用参数是所有 cmdlet 共有的一组参数,用来统一控制日志输出、风险操作与错误行为:-Verbose 打印细节、-WhatIf 只预演不执行、-Confirm 二次确认、-ErrorAction 决定报错时怎么做。自己写的函数只要加上 [CmdletBinding()] 就能获得同样的能力。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 |
|---|---|
| 常用参数 | -Verbose、-Debug、-WhatIf、-Confirm、-ErrorAction、-ErrorVariable、-OutVariable |
| 生效条件 | -WhatIf 与 -Confirm 要求命令实现了 ShouldProcess,否则不生效 |
| 错误动作取值 | Stop 转为终止错误、Continue 继续、SilentlyContinue 静默、Inquire 询问 |
| 全局偏好 | $ErrorActionPreference 可影响当前作用域内所有命令 |
典型使用场景
- 删除或覆盖类操作先加 -WhatIf 预演,核对目标清单再真正执行
- 排查脚本行为时打开 -Verbose,看清每一步实际执行了什么
- 脚本里用 -ErrorAction Stop 配合 try/catch 精确捕获失败
- 用 -ErrorVariable 收集错误,批量处理时不中断整体流程
- 交互式危险操作依赖 -Confirm 的逐项确认机制
常用示例
常用示例
# 预演删除,只列出将被删除的对象
Remove-Item D:\tmp\* -Recurse -WhatIf
# 显示详细执行过程
Copy-Item D:\a D:\b -Verbose
# 让失败变成终止错误,便于捕获
try { Get-Item D:\nope -ErrorAction Stop } catch { Write-Warning $_.Exception.Message }
# 静默忽略不存在的路径(谨慎使用)
Get-ChildItem D:\nope -ErrorAction SilentlyContinue
# 收集错误对象,不打断整体流程
Get-ChildItem D:\data -ErrorAction SilentlyContinue -ErrorVariable err
$err.Count常用通用参数
| 参数 | 作用 | 典型用途 |
|---|---|---|
| -Verbose | 输出详细过程信息 | 排查脚本到底执行了什么 |
| -WhatIf | 只显示将要执行的操作 | 危险操作执行前预演 |
| -Confirm | 执行前逐项询问 | 交互式确认场景 |
| -ErrorAction | 指定错误处理动作 | 脚本中改为 Stop 以便捕获 |
| -ErrorVariable | 把错误收集到变量 | 批量处理时避免中断 |
-WhatIf 与 -Confirm 只对实现了 ShouldProcess 的命令有效。自己写的函数要在关键动作处调用 $PSCmdlet.ShouldProcess,否则这两个参数传了也不会起作用。
把 -ErrorAction SilentlyContinue 当成通用解法会掩盖真正的故障,脚本看起来执行成功但结果是错的。排障期间先保持默认报错行为,确认逻辑无误后再考虑静默。