15

我只是一个初学者,干运行对于制作参数进行测试非常有用,任何人都可以告诉我如何以简单的方式使用它吗?我用谷歌搜索了它,但它的使用结果很少。

非常感谢

4

3 回答 3

27

在现有 cmdlet 上使用

显式提供 -WhatIf 参数:

rm foo.txt -WhatIf

结果:

What if: Performing operation "Remove File" on Target "C:\temp\foo.txt".

在函数或脚本中的现有 cmdlet 上使用

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,以对此进行讨论和解决方法。

于 2012-06-27T18:01:56.350 回答
4

您可能指的是 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"):
于 2012-06-26T16:26:34.273 回答
0

我认为您正在寻找的实际上是可以执行模型的模块 Pester(自第一次发布以来随 Windows 10 一起提供)。即假装运行部分代码来进行真正的独立单元测试。

虽然这是一个很大的话题......

MS 脚本 - 什么是 Pester,我为什么要关心?

于 2021-08-24T18:18:56.427 回答