我有一個PowerShell函數可以改變註冊表鍵值。代碼:PowerShell強制性參數取決於其他參數
param(
[Parameter()] [switch]$CreateNewChild,
[Parameter(Mandatory=$true)] [string]$PropertyType
)
它有一個參數「CreateNewChild」,如果該標誌被設置,該函數將創建關鍵屬性,即使它wan't發現。參數「PropertyType」必須是強制性的,但只有在「CreateNewChild」標誌已被設置的情況下。
問題是,如何使參數成爲強制性的,但只有在指定了另一個參數的情況下才有效。
好的,我一直在玩它。這確實有效:
param
([Parameter(ParameterSetName="one")]
[switch]$DoNotCreateNewChild, [string]$KeyPath, [string]$Name, [string]$NewValue, [Parameter(ParameterSetName="two")]
[switch]$CreateNewChild, [Parameter(ParameterSetName="two",Mandatory=$true)]
[string]$PropertyType
)
但是,這意味着$ KeyPath,$ Name和$ NewValue不再是強制性的。將「一個」參數設置爲強制中斷代碼(參數集不能解析錯誤)。這些參數集令人困惑。我敢肯定,有一種方法,但我不知道如何去做
我想這一點,這裏是代碼: '參數( [參數(位置= 0,強制= $真) ] [string] $ KeyPath, [參數(Position = 1,Mandatory = $ true)] [string] $名稱, [Parameter(Position = 2,Mandatory = $ true)] [string] $ NewValue, [Parameter (ParameterSetName =「One」)] [switch] $ CreateNewChild, [Parameter(ParameterSetName =「 One「,Mandatory = $ true)] [string] $ PropertyType ) '但是,這是行不通的。當試圖執行以下操作: 'Set-RegistryKeyPropertyValue -KeyPath $ path -Name $ name -NewValue 0' 它要求我提供$ PropertyType的值,因爲它是必需的 – lime
對不起,我應該更具體。我在上面的答案中增加了一個更好的例子。 :) –
是的,這正是我一直在尋找的!謝謝! p.s.我還沒有嘗試使「$ Favorite」爲強制性的一個選項= $ false,我認爲這是默認情況下是錯誤的。這個參數設置的邏輯很奇怪... – lime