[英]Passing script parameters to a function in 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 }
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数组的作用域不应该是全局的吗?
修改您的功能,如下所示:
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 { }
}
您必须将$ args从父作用域明确传递给子作用域。 父范围中的$ args在chlid范围中永远不可见,因为该范围是使用其自己的$ args初始化的。 做这个:
&{get-variable -scope 0}
并记录结果。 初始化范围时,您看到的每个变量都是在新范围中本地创建的,因此父范围中的那些变量在新范围中不可见。 $ args是这些变量之一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.