我只是一个初学者,干运行对于制作参数进行测试非常有用,任何人都可以告诉我如何以简单的方式使用它吗?我用谷歌搜索了它,但它的使用结果很少。
非常感谢
显式提供 -WhatIf 参数:
rm foo.txt -WhatIf
结果:
What if: Performing operation "Remove File" on Target "C:\temp\foo.txt".
SupportsShouldProcess
属性自动传播-WhatIf
到支持的 cmdlet:
function do-stuff
{
[CmdletBinding(SupportsShouldProcess=$True)]
param([string]$file)
Remove-Item $file
}
do-stuff foo.txt -WhatIf
结果:
What if: Performing operation "Remove File" on Target "C:\temp\foo.txt".
显式使用ShouldProcess()
方法判断是否-WhatIf
通过:
function do-stuff
{
[CmdletBinding(SupportsShouldProcess=$True)]
param([string]$file)
if ($PSCmdlet.ShouldProcess($file)) {
Write-Host "Deleting file"
Remove-Item $file
}
}
do-stuff foo.txt -WhatIf
结果:
What if: Performing operation "do-stuff" on Target "foo.txt".
SupportsShouldProcess
属性自动传播-WhatIf
到嵌套函数:
function do-stuff
{
[CmdletBinding(SupportsShouldProcess=$True)]
param([string]$file)
if ($PSCmdlet.ShouldProcess($file)) {
Write-Host "Deleting file"
Remove-Item $file
}
inner "text"
}
function inner
{
[CmdletBinding(SupportsShouldProcess=$True)]
param([string]$s)
if ($PSCmdlet.ShouldProcess($s)) {
Write-Host "Inner task"
}
$s | out-file "temp9.txt"
}
do-stuff foo.txt -WhatIf
结果:
What if: Performing operation "do-stuff" on Target "foo.txt".
What if: Performing operation "inner" on Target "text".
What if: Performing operation "Output to File" on Target "temp9.txt".
不幸的是, -WhatIf 不会自动传播到不同模块中定义的函数。请参阅Powershell:如何让 -whatif 传播到另一个模块中的 cmdlet,以对此进行讨论和解决方法。
您可能指的是 cmdlet 上的-WhatIf
和-Confirm
参数。您可以在以下位置阅读有关它们的信息Get-Help about_commonParameters
:
风险管理参数说明
-WhatIf[:{$true | $false}]
显示一条描述命令效果的消息,而不是执行命令。
WhatIf 参数覆盖
$WhatIfPreference
当前命令的变量值。$WhatIfPreference
因为变量的默认值为0
(禁用),所以如果没有 WhatIf 参数,则不会执行 WhatIf 行为。有关更多信息,请键入以下命令:get-help about_preference_variables
有效值:
$true
(-WhatIf:$true
)。具有与 相同的效果-WhatIf
。
$false
(-WhatIf:$false
)。抑制 $WhatIfPreference 变量的值为 1 时产生的自动 WhatIf 行为。例如,以下命令使用命令中的
WhatIf
参数Remove-Item
:PS> remove-item date.csv -whatif
Windows PowerShell 不会删除该项目,而是列出它将执行的操作以及将受到影响的项目。此命令产生以下输出:
What if: Performing operation "Remove File" on Target "C:\ps-test\date.csv".
-Confirm[:{$true | $false}]
在执行命令之前提示您确认。
Confirm 参数覆盖当前命令的 $ConfirmPreference 变量的值。默认值为高。有关更多信息,请键入以下命令:
get-help about_preference_variables
有效值:
$true
(-WhatIf:$true
)。具有与 相同的效果-Confirm
。
$false
(-Confirm:$false
)。禁止自动确认,当 的值$ConfirmPreference
小于或等于 cmdlet 的估计风险时会发生这种情况。例如,以下命令将 Confirm 参数与 Remove-Item 命令结合使用。在删除该项目之前,Windows PowerShell 会列出它将执行的操作以及将受到影响的项目,并请求批准。
PS C:\ps-test> remove-item tmp*.txt -confirm
此命令产生以下输出:
Confirm Are you sure you want to perform this action? Performing operation "Remove File" on Target " C:\ps-test\tmp1.txt [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
我认为您正在寻找的实际上是可以执行模型的模块 Pester(自第一次发布以来随 Windows 10 一起提供)。即假装运行部分代码来进行真正的独立单元测试。
虽然这是一个很大的话题......