【发布时间】:2016-05-07 16:14:33
【问题描述】:
我正在尝试编写一个失败的简单脚本,利用参数集来简化输入和验证。我希望脚本看起来像这样:
.\zipandrotate.ps1 -Zip [-AllButDays <int>] -Rotate [-MaxRetentionDays <int>]
-Zip 和 -AllButDays 是可选的,-Rotate 和 -MaxRetentionDays 也是如此。
我尝试将默认参数集设置为 zip,但没有奏效。我希望它允许执行:仅压缩、仅旋转或同时压缩和旋转。
[CmdletBinding(DefaultParameterSetBame="zip")]
param(
[Parameter(Mandatory=$false, ParameterSetName="zip")]
[Switch]$Zip,
[Parameter(Mandatory=$true, ParameterSetName="rotate")]
[Switch]$Rotate,
[Parameter(ParameterSetName="zip", Mandatory=$true)]
[int]$AllButDays,
[Parameter(ParameterSetName="rotate", Mandatory=$false)]
[int]$MaxRetentionDays
)
我在 PowerShell 5 (Windows 10) 和 PowerShell 4 (Windows 7) 中收到以下错误:
PS C:\> .\zipandrotate.ps1 -Zip -AllButDays 2 -Rotate -MaxRetentionDays 2
C:\zipandrotate.ps1 : 无法使用指定的命名解析参数集
参数。
在行:1 字符:1
+ .\zipandrotate.ps1 -Zip -AllButDays 2 -Rotate -MaxRetentionDays 2
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [zipandrotate.ps1], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,zipandrotate.ps1
以三种不同的方式运行命令告诉我问题在于尝试同时使用-Zip 和-Rotate。
作品:
.\zipandrotate.ps1 -zip -allbutdays 2
.\zipandrotate.ps1 -rotate -maxretentiondays 90
不起作用:
.\zipandrotate.ps1 -zip -allbutdays 2 -rotate -maxretentiondays 90
所以我看到我的脚本有 4 条路径:
允许:仅压缩、仅旋转、两者
不允许:无
对我如何到达那里有什么建议吗?添加第三个参数集扭转了这种情况。只有-Zip 和-Rotate 有效;个人使用不再有任何独特的情况来确定它们是哪个参数集。有没有办法获得我想要的功能,不需要额外的参数来单独运行 -Zip 或 -Rotate?
【问题讨论】:
-
如果这是唯一需要的值,你能把每组组合起来吗?
-ZipAllButDays:2?
标签: powershell named-parameters