我試圖編寫一個失敗簡單的腳本利用參數集來簡化輸入和驗證。我想腳本是這樣的:多個參數集不工作
.\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(視窗10)和PowerShell 4(Windows 7)中:
PS C:\>.\zipandrotate.ps1 -Zip -AllButDays 2 -Rotate -MaxRetentionDays 2 C:\zipandrotate.ps1 : Parameter set cannot be resolved using the specified named parameters. At line:1 char: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'? – Eris