将参数嵌入开关
Embedding parameters to a switch
我有一个 .ps1 可以调用文件,如果它不能调用文件,它将在本地查找这些文件。我想提供选项作为参数,要么在本地工作,要么从互联网上获取,并指定要使用或调用 5 个文件中的哪个。我使脚本与 "local" 和 "external" 函数一起工作,但我如何向这些函数添加参数?
例如:
./script.ps1 -local file1,file2,file3
或
./script.ps1 -external file4,file5
这是我目前的代码:
Param(
[Parameter(Position=1)][string]$option
)
function RunLocal {
Write-Host "local"
}
function RunExternal {
Write-Host "ext"
}
function RunDefault {
Write-Host "default"
}
switch ($option) {
local { RunLocal }
external { RunExternal }
default { RunDefault }
}
我会定义不同的 parameter sets 并通过参数集名称进行区分。
[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
)
# ...
switch ($PSCmdlet.ParameterSetName) {
'local' { RunLocal }
'external' { RunExternal }
'default' { RunDefault }
}
# Usage:
# script.ps1 [-Default] 'file1', 'file2'
# script.ps1 -External 'file1', 'file2'
# script.ps1 -Local 'file1', 'file2'
另一个选项是对选项和文件列表使用单独的参数,如 suggested, but in that case you should validate -Option
参数,因此只能使用允许的选项:
[CmdletBinding()]
Param(
[Parameter(Position=0, Mandatory=$true)]
[ValidateSet('default', 'external', 'local')]
[string]$Option,
[Parameter(Position=1, Mandatory=$true)]
[string[]]$File
)
# ...
switch ($Option) {
'local' { RunLocal }
'external' { RunExternal }
'default' { RunDefault }
}
# Usage:
# script.ps1 'default' 'file1', 'file2'
# script.ps1 -Option 'default' -File 'file1', 'file2'
# script.ps1 'external' 'file1', 'file2'
# script.ps1 -Option 'external' -File 'file1', 'file2'
# script.ps1 'local' 'file1', 'file2'
# script.ps1 -Option 'local' -File 'file1', 'file2'
我有一个 .ps1 可以调用文件,如果它不能调用文件,它将在本地查找这些文件。我想提供选项作为参数,要么在本地工作,要么从互联网上获取,并指定要使用或调用 5 个文件中的哪个。我使脚本与 "local" 和 "external" 函数一起工作,但我如何向这些函数添加参数?
例如:
./script.ps1 -local file1,file2,file3
或
./script.ps1 -external file4,file5
这是我目前的代码:
Param(
[Parameter(Position=1)][string]$option
)
function RunLocal {
Write-Host "local"
}
function RunExternal {
Write-Host "ext"
}
function RunDefault {
Write-Host "default"
}
switch ($option) {
local { RunLocal }
external { RunExternal }
default { RunDefault }
}
我会定义不同的 parameter sets 并通过参数集名称进行区分。
[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
)
# ...
switch ($PSCmdlet.ParameterSetName) {
'local' { RunLocal }
'external' { RunExternal }
'default' { RunDefault }
}
# Usage:
# script.ps1 [-Default] 'file1', 'file2'
# script.ps1 -External 'file1', 'file2'
# script.ps1 -Local 'file1', 'file2'
另一个选项是对选项和文件列表使用单独的参数,如 -Option
参数,因此只能使用允许的选项:
[CmdletBinding()]
Param(
[Parameter(Position=0, Mandatory=$true)]
[ValidateSet('default', 'external', 'local')]
[string]$Option,
[Parameter(Position=1, Mandatory=$true)]
[string[]]$File
)
# ...
switch ($Option) {
'local' { RunLocal }
'external' { RunExternal }
'default' { RunDefault }
}
# Usage:
# script.ps1 'default' 'file1', 'file2'
# script.ps1 -Option 'default' -File 'file1', 'file2'
# script.ps1 'external' 'file1', 'file2'
# script.ps1 -Option 'external' -File 'file1', 'file2'
# script.ps1 'local' 'file1', 'file2'
# script.ps1 -Option 'local' -File 'file1', 'file2'