[英]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.