Powershell 使参数组成为必需的

Powershell 使参数组成为必需的,powershell,arguments,Powershell,Arguments,如何使PowerShell脚本接受0或3个参数?要么全有,要么一无所有 [CmdletBinding()] Param( # Name of VPN connection [Parameter(Mandatory=$False,ValueFromPipeline=$True,Position=1)] [string]$vpn_name, # Server URL or IP [Parameter(Mandatory=$False,ValueFromPip

如何使PowerShell脚本接受0或3个参数?要么全有,要么一无所有

[CmdletBinding()]
Param(
    # Name of VPN connection
    [Parameter(Mandatory=$False,ValueFromPipeline=$True,Position=1)]
    [string]$vpn_name,

    # Server URL or IP
    [Parameter(Mandatory=$False,ValueFromPipeline=$True,Position=2)]
    [string]$vpn_server,

    # 192.168.72.0/24
    [Parameter(Mandatory=$False,ValueFromPipeline=$True,Position=3)]
    [string[]]$target_nets
)
试试这个

Param(
    [Parameter(Mandatory=$True, Position=0, ParameterSet="FirstSet")]
    [string]FirstRequiredParam,

    [Parameter(Mandatory=$False, Position=0, ParameterSet="SecondSet")]
    [string]FirstNotRequiredParam
)
试试这个

Param(
    [Parameter(Mandatory=$True, Position=0, ParameterSet="FirstSet")]
    [string]FirstRequiredParam,

    [Parameter(Mandatory=$False, Position=0, ParameterSet="SecondSet")]
    [string]FirstNotRequiredParam
)

这是一个简化的代码片段

[CmdletBinding()]
Param(
    # Name of VPN connection
    [Parameter(Mandatory=$True, ParameterSetName="WithParams")]
    [string]$name,  

    # Server URL or IP
    [Parameter(Mandatory=$True, ParameterSetName="WithParams"))]
    [string]$vpn_server,


    # No params
    [Parameter(Mandatory=$False,ValueFromPipeline=$True,Position=0, ParameterSetName="NoParams")]
    [string]$none
)

# Then check what parameters set was passed
switch ($PsCmdlet.ParameterSetName){
    "WithParams"  { Write-Host $name; break}
    "NoParams"    { Write-Host "No params passed."; break }
}

这是一个简化的代码片段

[CmdletBinding()]
Param(
    # Name of VPN connection
    [Parameter(Mandatory=$True, ParameterSetName="WithParams")]
    [string]$name,  

    # Server URL or IP
    [Parameter(Mandatory=$True, ParameterSetName="WithParams"))]
    [string]$vpn_server,


    # No params
    [Parameter(Mandatory=$False,ValueFromPipeline=$True,Position=0, ParameterSetName="NoParams")]
    [string]$none
)

# Then check what parameters set was passed
switch ($PsCmdlet.ParameterSetName){
    "WithParams"  { Write-Host $name; break}
    "NoParams"    { Write-Host "No params passed."; break }
}

接近工作解决方案。应该是
ParameterSetName
`它可以工作?`是的。非常感谢。我找到了更多信息。接近工作解决方案。应该是
ParameterSetName
`它可以工作?`是的。非常感谢。我找到了更多的信息。