【问题标题】:How to run sdelete with a whatif flag如何使用 whatif 标志运行 sdelete
【发布时间】:2017-07-03 10:36:13
【问题描述】:

我正在编写一个 PowerShell 脚本,查找带有 Get-ChildItem 的目录并将它们传递给 sdelete。我想试运行它。我认为sdelete 没有-WhatIf 标志。有什么办法可以达到类似的效果吗?

【问题讨论】:

    标签: windows powershell command-line


    【解决方案1】:

    您可以通过在函数顶部的 CmdletBinding 语句中添加 SupportShouldProcess 并在代码中添加 if ($pscmdlet.ShouldProcess(something) { } 块来实现 -WhatIf-Confirm 功能。

    例如:

    Function Remove-WithSDelete {
      [CmdletBinding(SupportsShouldProcess,ConfirmImpact="High")]
      Param ($File)
    
      Process {
        if ($pscmdlet.ShouldProcess($File)) {
            & sdelete.exe $File
        }
      }
    }
    

    用法:

    PS C:\> Remove-WithSDelete c:\temp -WhatIf
    What if: Performing the operation "Remove-WithSDelete" on target "c:\temp".
    

    ConfirmImpact 部分是可选的,用于定义自动调用-Confirm 的级别。如果函数的影响级别等于或大于您的$ConfirmPreference 级别,则-Confirm 将是默认行为(无需显式调用它。您可以通过执行-Confirm:$false 来强制关闭它)。如果您省略它,您的功能确认级别默认为“中”。 $ConfirmPreference 变量的默认级别是“高”。

    【讨论】:

    • Remove-item ... -WhatIf 解决方法答案中途暂停以尝试此操作。像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多