簡體   English   中英

將腳本參數傳遞給Powershell中的函數

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM