首页/系统/Windows 运维速查/通用参数 -Verbose -WhatIf
PowerShell 基础66 条

通用参数 -Verbose -WhatIf

所有 cmdlet 都支持一组通用参数:-Verbose 看细节、-WhatIf 预演、-Confirm 二次确认、-ErrorAction 控制错误行为。

Windows 运维速查系统更新于 2026-10-13

通用参数是什么

通用参数是所有 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 当成通用解法会掩盖真正的故障,脚本看起来执行成功但结果是错的。排障期间先保持默认报错行为,确认逻辑无误后再考虑静默。

易错点

  • -WhatIf 在自写函数上无效,因为函数没有实现 ShouldProcess,误以为已预演其实真的执行了
  • -ErrorAction SilentlyContinue 会掩盖真实故障,导致脚本报告成功而结果不正确
  • 脚本里用 -ErrorAction Stop 却没有 try/catch,会让整个脚本直接终止
  • 修改全局 $ErrorActionPreference 会影响同会话内其他命令,造成难以定位的连带问题
  • -Verbose 输出与正常结果处于不同流,若把两者一起重定向到文件,日志记录会干扰数据提取

数据来源与参考

  • Microsoft Learn:about_CommonParameters

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌