hash table/pscustomobject 而不是 switch 块
hash table/pscustomobject instead of switch block
有没有办法使用 hash table 或 pscustomobject 来代替下面的 switch 块? hash table 似乎是简化函数的好方法。
function Get-Farm
{
[cmdletbinding()]
param (
[parameter (Mandatory = $true)]
[string]$farm)
Process{
switch($farm){
A {
$script:startHostID = 0
$script:endHostID = 0
}
B {
$script:startHostID = 1
$script:endHostID = 12
}
C {
$script:startHostID = 13
$script:endHostID = 24
}
BC {
$script:startHostID = 1
$script:endHostID = 24
}
ALL {
$script:startHostID = 1
$script:endHostID =48
}
}
}
确实,散列table 查找是更好的选择。
在 Begin
块中创建查找 table 并在 Process
.
中使用它
另外,参数说明中使用ValueFromPipeline
,否则不要使用Process
.
function Get-Farm
{
[cmdletbinding()]
param (
[parameter(Mandatory, ValueFromPipeline)]
[string]$farm
)
Begin {
$lookup = @{
A = 0,0
B = 1,12
C = 13,24
BC = 1,24
ALL = 1,48
}
}
Process {
if ($values = $lookup[$farm]) {
$script:startHostID = $values[0]
$script:endHostID = $values[1]
}
}
}
我使用了if()
里面的赋值来压缩代码,当然你也可以单独写:
$values = $lookup[$farm]
if ($values) {
有没有办法使用 hash table 或 pscustomobject 来代替下面的 switch 块? hash table 似乎是简化函数的好方法。
function Get-Farm
{
[cmdletbinding()]
param (
[parameter (Mandatory = $true)]
[string]$farm)
Process{
switch($farm){
A {
$script:startHostID = 0
$script:endHostID = 0
}
B {
$script:startHostID = 1
$script:endHostID = 12
}
C {
$script:startHostID = 13
$script:endHostID = 24
}
BC {
$script:startHostID = 1
$script:endHostID = 24
}
ALL {
$script:startHostID = 1
$script:endHostID =48
}
}
}
确实,散列table 查找是更好的选择。
在 Begin
块中创建查找 table 并在 Process
.
中使用它
另外,参数说明中使用ValueFromPipeline
,否则不要使用Process
.
function Get-Farm
{
[cmdletbinding()]
param (
[parameter(Mandatory, ValueFromPipeline)]
[string]$farm
)
Begin {
$lookup = @{
A = 0,0
B = 1,12
C = 13,24
BC = 1,24
ALL = 1,48
}
}
Process {
if ($values = $lookup[$farm]) {
$script:startHostID = $values[0]
$script:endHostID = $values[1]
}
}
}
我使用了if()
里面的赋值来压缩代码,当然你也可以单独写:
$values = $lookup[$farm]
if ($values) {