Arrays 将脚本参数传递给Powershell中的函数
我的脚本调用的函数需要脚本调用中的参数:Arrays 将脚本参数传递给Powershell中的函数,arrays,function,powershell,Arrays,Function,Powershell,我的脚本调用的函数需要脚本调用中的参数: function new( $args ) { if( $args.length -lt 8 ) { Write-Host "Parameter Missing, requires 8 Parameters. Aborting."! Write-Host $args.length break } } switch ($args[0]) { '--test' { } '--new' { new $args }
function new( $args )
{
if( $args.length -lt 8 )
{
Write-Host "Parameter Missing, requires 8 Parameters. Aborting."!
Write-Host $args.length
break
}
}
switch ($args[0]) {
'--test' { }
'--new' { new $args }
default { }
}
当我调用它时,args数组不会移交给new
函数:
PS Q:\mles\etl-i_test> .\iprog.ps1 --new 1 2 3 4 5 6 7
Parameter Missing, requires 8 Parameters. Aborting. !
0
如何将数组传递给powershell中的函数?或者特别是$args数组?$args数组的作用域不应该是全局的吗?必须将$args从父作用域显式传递到子作用域$父作用域中的args在chlid作用域中永远不可见,因为该作用域是用它自己的$args初始化的。这样做:
&{get-variable -scope 0}
并注意结果。初始化作用域时,您看到的每个变量都在新作用域中本地创建,因此父作用域中的这些变量在新作用域中不可见$args是这些变量之一。按如下方式修改函数:
function new { param([string[]] $paramargs)
if( $paramargs.length -lt 8 )
{
Write-Host "Parameter Missing, requires 8 Parameters. Aborting."!
Write-Host $paramargs.length
break
}
}
switch ($args[0]) {
'--test' { }
'--new' { new $args }
default { }
}
这将避免命令行中变量
$arg
和参数$arg
(更改为$paramarg
)的歧义。任何函数始终包含$args
。当您使用$args
作为参数名调用函数时,事情会变得相当混乱。在函数中,将名称更改为除$args
以外的其他名称,它应该可以工作
function new( $arguments )
{
$arguments.Length
if( $arguments.length -lt 8 )
{
Write-Host "Parameter Missing, requires 8 Parameters. Aborting."!
Write-Host $arguments.length
break
}
}
switch ($args[0]) {
'--test' { }
'--new' { new $args }
default { }
}
尝试使用
参数(…)
-Ah有趣。我不能在一个函数中覆盖$args。将$args重命名为其他名称就可以了,谢谢!param([string[]]
是必需的吗?它在没有.Ya的情况下可以工作,param([string[]]
不是必需的。我尝试了这种方法并发布了so:)