我想创建一个与log
类似的Write-Host
函数,我可以给它一些临时参数和一些参数:
function log ( [int]$ident=0, [switch]$notime) {
$now = (Get-Date).ToString('s')
Write-Host $(if (!$NoTime) {now}) $($args | % { ' '*$ident*2 + $_ })
}
log 'test 1' 'test 2' # Cannot convert value "test 1" to type "System.Int32"
log 'test 1' 'test 2' -Ident 1 #Works
我知道我可以使用$args
获取未声明的args或使用ValueFromRemainingArguments
属性,但这需要我更改调用函数的方式,因为声明的函数参数将收集它们。
答案 0 :(得分:4)
关闭位置绑定:
function log {
[CmdletBinding(PositionalBinding=$False)]
param (
[int]$indent=0,
[switch]$notime,
[Parameter(ValueFromRemainingArguments)]
[string[]] $rest
)
$now = (Get-Date).ToString('s')
Write-Host $(if (!$NoTime) {$now}) $($rest | % { ' '*$indent*2 + $_ })
}
请注意,显然,您现在需要包含参数的名称,但这应该是一件好事(要知道1
是否为{{1}的值,这会让人感到困惑或者记录的第一个值。