IT

PowerShell 필수 매개 변수는 다른 매개 변수에 따라 다릅니다.

itgroup 2023. 8. 26. 10:42
반응형

PowerShell 필수 매개 변수는 다른 매개 변수에 따라 다릅니다.

레지스트리 키 값을 변경하는 PowerShell 기능이 있습니다.코드:

param(
    [Parameter()] [switch]$CreateNewChild,
    [Parameter(Mandatory=$true)] [string]$PropertyType
)

여기에는 "CreateNewChild"라는 매개 변수가 있으며, 이 플래그가 설정되어 있으면 키 속성을 찾지 못했더라도 함수가 키 속성을 만듭니다.매개 변수 "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가 더 이상 필수 사항이 아님을 의미합니다."하나" 매개 변수 집합을 필수로 설정하면 코드가 깨집니다(" 매개 변수 집합을 확인할 없음" 오류).이러한 매개 변수 집합은 혼동을 일으킵니다.방법이 있을 거라고 확신하지만, 어떻게 해야 할지 모르겠어요.

이를 위해 매개 변수 집합을 정의하여 이러한 매개 변수를 그룹화할 수 있습니다.

param (
    [Parameter(ParameterSetName='One')][switch]$CreateNewChild,
    [Parameter(ParameterSetName='One',Mandatory=$true)][string]$PropertyType
)

참조:

https://devblogs.microsoft.com/powershell/powershell-v2-parametersets

http://blogs.technet.com/b/heyscriptingguy/archive/2011/06/30/use-parameter-sets-to-simplify-powershell-commands.aspx

업데이트 ---

여기 당신이 찾고 있는 기능을 모방한 스니펫이 있습니다.-Favorite 스위치를 호출하지 않으면 "추가" 매개 변수 세트가 처리되지 않습니다.

[CmdletBinding(DefaultParametersetName='None')] 
param( 
    [Parameter(Position=0,Mandatory=$true)] [string]$Age, 
    [Parameter(Position=1,Mandatory=$true)] [string]$Sex, 
    [Parameter(Position=2,Mandatory=$true)] [string]$Location,
    [Parameter(ParameterSetName='Extra',Mandatory=$false)][switch]$Favorite,      
    [Parameter(ParameterSetName='Extra',Mandatory=$true)][string]$FavoriteCar
)

$ParamSetName = $PsCmdLet.ParameterSetName
    
Write-Output "Age: $age"
Write-Output "Sex: $sex"
Write-Output "Location: $Location"
Write-Output "Favorite: $Favorite"
Write-Output "Favorite Car: $FavoriteCar"
Write-Output "ParamSetName: $ParamSetName"

동적 매개 변수를 사용할 수도 있습니다.

동적 매개 변수를 만드는 새로운 방법

언급URL : https://stackoverflow.com/questions/13533763/powershell-mandatory-parameter-depends-on-another-parameter

반응형