【发布时间】:2017-07-03 10:36:13
【问题描述】:
我正在编写一个 PowerShell 脚本,查找带有 Get-ChildItem 的目录并将它们传递给 sdelete。我想试运行它。我认为sdelete 没有-WhatIf 标志。有什么办法可以达到类似的效果吗?
【问题讨论】:
标签: windows powershell command-line
我正在编写一个 PowerShell 脚本,查找带有 Get-ChildItem 的目录并将它们传递给 sdelete。我想试运行它。我认为sdelete 没有-WhatIf 标志。有什么办法可以达到类似的效果吗?
【问题讨论】:
标签: windows powershell command-line
您可以通过在函数顶部的 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 解决方法答案中途暂停以尝试此操作。像魅力一样工作。