Я реализую командлет Powershell в C #. Командлет может быть передан два параметра. Оба помечены как необязательные (поскольку я заранее не знаю, будет ли пользователь выдавать Get-MsiInstalled -Product "0449F3E3-2337-45EF-BE77-60F4B9CD8822"
или Get-MsiInstalled -MsiFile "C:filePath\file.msi"
.
. Более того, если пользователь ничего не дает и выдает Get-MsiInstalled, исключение будетБрошенный (должен быть указан либо параметр MSI, либо Product).
В настоящий момент реализация не может ожидать не более одного параметра. Вместо этого пользователь может предоставить оба параметра, что является недопустимым вызовом.
public class GetAHPIsMsiInstalled : Cmdlet
{
[Parameter(Mandatory = false, ValueFromPipeline = true,
HelpMessage = "Product Guid to search Installable Package.", Position = 1)]
[UsedImplicitly]
public string Product { get; set; }
[Parameter(Mandatory = false, ValueFromPipeline = true, HelpMessage = "Installable Package to search.",
Position = 1)]
[UsedImplicitly]
public string MsiFile { get; set; }
protected override void BeginProcessing()
{
if (string.IsNullOrEmpty(Product) && string.IsNullOrEmpty(MsiFile))
ThrowTerminatingError(new ErrorRecord(new
ParameterBindingException("At most one parameter must be provided"))
base.BeginProcessing();
................................
}
}