访问powershell中的$ args数组

lar*_*ryq 26 powershell args

我有一个测试PowerShell V2脚本,如下所示:

    function test_args()
    {
      Write-Host "here's arg 0: $args[0]"
      Write-Host "here's arg 1: $args[1]"
    }


    test_args
Run Code Online (Sandbox Code Playgroud)

如果我从powershell命令提示符调用它,我会在屏幕上显示:

here's arg[0]: [0]

here's arg[1]: [1]
Run Code Online (Sandbox Code Playgroud)

不是我想要的.在我可以使用之前,似乎我必须将$ args [0]和$ args [1]复制到脚本中的新变量中?如果我这样做,我可以很好地访问.

有没有办法在我的代码中访问索引的$ args?我尝试过以各种方式使用花括号,但没有运气.

我最终将转向命名参数,但我正在处理的脚本(不是这个演示版)是批处理文件的直接端口.

Kei*_*ill 41

试试这个:

function test_args()
{
  Write-Host "here's arg 0: $($args[0])"
  Write-Host "here's arg 1: $($args[1])"
}

test_args foo bar
Run Code Online (Sandbox Code Playgroud)

请注意它是否$args存在$arg.此外,当您在字符串中使用PowerShell变量时,PowerShell仅替换变量的值.你不能直接使用像这样的表达式$args[0].但是,您可以将表达式$()放在双引号字符串中的子表达式组中,以使PowerShell评估表达式,然后将结果转换为字符串.

  • 函数始终可以访问$ args.它将包含任何不映射到已定义函数参数的参数.如果没有参数或所有参数都映射到函数参数,例如`function foo($ param1,$ param2){}`那么$ args将是一个空数组. (10认同)
  • 关于“$args”可用性的小警告:_高级_函数(或脚本) - 即那些“param()”块用“[CmdletBinding()]”属性修饰和/或其参数用“[Parameter()”修饰的函数]` 属性 - 基本上不允许调用,除非_所有_参数都传递绑定到_声明_参数。换句话说:“$args”不适用于高级函数和脚本。 (4认同)