【问题标题】:How to determine if Powershell WhatIf intends to make changes programmatically如何确定 Powershell WhatIf 是否打算以编程方式进行更改
【发布时间】:2021-03-14 08:59:12
【问题描述】:

我正在寻找一种以编程方式确定 PowerShell 是否希望使用 whatif 标志进行更改的方法。我有一组实现 ShouldProcess 的脚本,whatif 仅在脚本确定某些内容未处于所需状态时才返回输出。

如果 whatif 想要进行更改,我希望 PowerShell 提醒我,以便人工审核计划。但是,在阅读文档后,我找不到任何关于 whatif 是否希望进行更改的建议。

任何帮助将不胜感激。

【问题讨论】:

  • 如果 whatif 想要进行更改.. -WhatIf 开关不会进行任何更改。它只是报告会发生什么,因此您或任何其他人都可以看到如果不是-WhatIf 开关,代码会做什么......
  • 我应该改写一下 - 我想要一种程序化的方式来检测 whatif 是否报告某事将要发生。
  • 啊,那不妨看看ShouldProcess

标签: powershell sysadmin


【解决方案1】:

这有点 hacky,但您可以使用 -Confirm 在非交互式上下文中执行该命令 - 如果它抛出任何表明无法调用 ShouldProcess 的异常,您就会知道您遇到了潜在的破坏性代码路径:

# Create non-interactive sandbox for executing with `-Confirm`
$sandbox = [PowerShell]::Create().AddScript({Verb-Noun -Confirm})
$null = $sandbox.Invoke()
if($sandbox.HadErrors){
  if($sandbox.Streams.Error.Where({$_.Exception -is [System.Management.Automation.MethodInvocationException] -and $_.Exception.Message -match '*"ShouldProcess"*'})){
    # Code reached ShouldProcess
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2011-10-17
    相关资源
    最近更新 更多