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

最佳答案

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

例如:

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变量的默认级别为“高”。

关于windows - 如何使用whatif标志运行sdelete,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44883450/

10-12 21:08