Простой случай: попытка написать командлет, который предложит пользователю подтвердить свое действие. Это означает, что я должен поставить ShouldProcess в вызове метода ProcessRecord, но он всегда возвращает true независимо ни от чего (без запроса). Вот простой случай:
using System;
using System.Management.Automation;
[Cmdlet(VerbsDiagnostic.Test, "ShouldProcess",
SupportsShouldProcess = true)]
public class TestShouldProcessCommand : Cmdlet
{
[Parameter(Position = 0,
ParameterSetName = "Force")]
public SwitchParameter Force;
protected override void ProcessRecord()
{
if (ShouldProcess("ShouldProcess Target"))
{
if (Force || ShouldContinue("ShouldContinue Query",
"ShouldContinue Caption"))
{
WriteObject("Hello");
}
else
{
ThrowTerminatingError(new ErrorRecord(new Exception(
"Error Message"), "Error ID",
ErrorCategory.InvalidData, "Target Object"));
}
}
}
}
Когда вы загружаете PowerShell и пытаетесь запустить его (после импорта dll с помощью Import-Module), все, что вы получаете, это:
PS C:\Users\user> Test-ShouldProcess
ShouldContinue Caption
ShouldContinue Query
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y
Hello
Это ожидаемый результат для ShouldContinue, но ничего не происходит для вызова ShouldProcess, который идет первым. Если вы просто распечатаете возвращаемое значение вызова ShouldProcess, оно всегда истинно, независимо от того, как я его использую. Протестировано в PowerShell 2 и 3, а также на обычной машине. Использование Visual Studio 2010 Pro.