Powershell 将范围作为数组传递?
Powershell pass a range as an array?
我正在尝试将范围作为数组传递,这样我就可以 return PowerShell 中的数组:
function iterHostsToArray($arr, $str) {
$hostz = @()
$arr | % { $hostz = "$($str)$($_)" }
return $hostz
}
$skybarHosts = iterHostsToArray((1..2), 'BAR')
$skyboxHosts = iterHostsToArray((1..6), 'BOX')
我期待以下内容:
PS> $skybarHosts
BAR1
BAR2
PS> $skyboxHosts
BOX1
BOX2
BOX3
BOX4
BOX5
BOX6
我正在重构类似这样的东西,它有效:
$skybarHosts = @()
(1..2) | % { $skybarHosts += "HCPNSKYBAR$($_)" }
有两个问题。第一个是 Powershell 中的一个常见陷阱:function definitions 使用逗号分隔参数,但 function calls 使用空格。传递范围和字符串的语法是这样的,
iterHostsToArray (1..2) 'BAR'
另一个问题是 $hostz
数组被覆盖,而不是附加。使用 +=
将新元素追加到数组中,
$hostz = @()
$arr | % { $hostz += "$($str)$($_)" }
如评论中所述,如果所有功能都只是创建一个数组,则可以简化一些。当 $arr
传递给 foreach 迭代器且未完成赋值时,输出沿管道传递,函数 returns 对象数组。像这样,
function iterHostsToArray($arr, $str) {
$arr | % { "$($str)$($_)" }
}
当然,如果您想在函数中处理数组内容,则此方法不起作用。那样的话,
function iterHostsToArray($arr, $str) {
$hostz = $arr | % { "$($str)$($_)" }
# Do sutff with $hostz
# ...
# finally, either
return $hostz
# or simply
$hostz
}
我正在尝试将范围作为数组传递,这样我就可以 return PowerShell 中的数组:
function iterHostsToArray($arr, $str) {
$hostz = @()
$arr | % { $hostz = "$($str)$($_)" }
return $hostz
}
$skybarHosts = iterHostsToArray((1..2), 'BAR')
$skyboxHosts = iterHostsToArray((1..6), 'BOX')
我期待以下内容:
PS> $skybarHosts
BAR1
BAR2
PS> $skyboxHosts
BOX1
BOX2
BOX3
BOX4
BOX5
BOX6
我正在重构类似这样的东西,它有效:
$skybarHosts = @()
(1..2) | % { $skybarHosts += "HCPNSKYBAR$($_)" }
有两个问题。第一个是 Powershell 中的一个常见陷阱:function definitions 使用逗号分隔参数,但 function calls 使用空格。传递范围和字符串的语法是这样的,
iterHostsToArray (1..2) 'BAR'
另一个问题是 $hostz
数组被覆盖,而不是附加。使用 +=
将新元素追加到数组中,
$hostz = @()
$arr | % { $hostz += "$($str)$($_)" }
如评论中所述,如果所有功能都只是创建一个数组,则可以简化一些。当 $arr
传递给 foreach 迭代器且未完成赋值时,输出沿管道传递,函数 returns 对象数组。像这样,
function iterHostsToArray($arr, $str) {
$arr | % { "$($str)$($_)" }
}
当然,如果您想在函数中处理数组内容,则此方法不起作用。那样的话,
function iterHostsToArray($arr, $str) {
$hostz = $arr | % { "$($str)$($_)" }
# Do sutff with $hostz
# ...
# finally, either
return $hostz
# or simply
$hostz
}