我正在尝试将两个主要功能传递给其他功能。例如
./script.ps1-本地test1,test2
这是我的代码,-local工作,并在之后请求另一个输入,但它实际上不输出test1。
[CmdletBinding(DefaultParameterSetName='default')]
Param(
[Parameter(ParameterSetName='default', Position=0, Mandatory=$true)]
[string[]]$Default,
[Parameter(ParameterSetName='external', Position=0, Mandatory=$true)]
[string[]]$External,
[Parameter(ParameterSetName='local', Position=0, Mandatory=$true)]
[string[]]$Local
)
function RunLocal {
switch ($PSCmdlet.ParameterSetName) {
'Test1' { Test1 }
'Test2' { Test2 }
}
function Test1 {Write-Host "Test1"}
function Test2 {Write-Host "Test2"}
}
function RunExternal {}
function RunDefault {}
switch ($PSCmdlet.ParameterSetName) {
'local' { RunLocal }
'external' { RunExternal }
'default' { RunDefault }
}
不太清楚你想要完成什么,但我认为这可能会让你前进:
[CmdletBinding(DefaultParameterSetName='default')]
Param(
[Parameter(ParameterSetName='default', Position=0, Mandatory=$true)]
[string[]]$Default,
[Parameter(ParameterSetName='external', Position=0, Mandatory=$true)]
[string[]]$External,
[Parameter(ParameterSetName='local', Position=0, Mandatory=$true)]
[switch]$Local,
[Parameter(ParameterSetName='local', Position=1, Mandatory=$false)]
[ValidateSet ('Test1','Test2')]
[string]$ExecuteLocal = 'Test1'
)
function RunLocal {
[CmdletBinding()]
Param(
[Parameter(Position=0, Mandatory=$false)]
[ValidateSet ('Test1','Test2')]
[string]$Execute = 'Test1'
)
function Test1 {Write-Host 'Running Local -> Test1'}
function Test2 {Write-Host 'Running Local -> Test2'}
switch ($Execute) {
'Test1' { Test1 }
'Test2' { Test2 }
}
}
function RunExternal {Write-Host 'Running External'}
function RunDefault {Write-Host 'Running Default'}
switch ($PSCmdlet.ParameterSetName) {
'local' { RunLocal -Execute $ExecuteLocal }
'external' { RunExternal }
'default' { RunDefault }
}
正如您所看到的,我已将ValidateSet
添加到Local函数中,因此您可以将其用作表示Test1
或Test2
的参数。
此外,在函数RunLocal
中,我已将内部函数放在开关上方,因为在Powershell函数中需要先定义函数才能调用它们。
用./script.ps1 -Local -ExecuteLocal Test1
运行它
希望这可以帮助