Powershell相当于" $ @"来自bash

时间:2017-10-07 13:46:40

标签: bash powershell

我不太了解powershell,但我想从powershell运行另一个脚本,并传递所有未使用的参数。在bash中,我这样做(简化):

MY_PARAM=$1
shift
python otherscript.py "$@"

我在powershell中尝试了很多东西,但没有任何效果。在我的python脚本中,我收到了" System.Object[]" (或" System.Collections.Generic.List`1[System.Object]")或包含在单个字符串中的所有参数作为第一个参数(当然还有各种错误消息)。我试过了:

  • python otherscript.py $args
  • Invoke-Expression "python otherscript.py $args"
  • 代替$args我也尝试使用$MyInvocation.Line$MyInvocation.UnboundArguments

这个的正确语法是什么?

更新1

作为Mathias R. Jessen注释,从"全局范围调用python脚本"与python otherscript.py $args一样正如我所料。

我实际上要做的是从函数中调用我的python脚本:

param (
    [string]$command = ""
)

function Invoke-Other() {
    python otherscript.py $args
}

switch ($command) {
    "foo" {
        Invoke-Other $args
    }
}

这是设置,当我得到一个,"包裹"当我用.\myscript.ps1 foo bar baz调用我的powershell脚本时,参数" bar baz"。

1 个答案:

答案 0 :(得分:1)

当你调用$diff = $finish_time_ob->diffInDays($start_time_ob); 时,参数列表作为单个(数组)参数传递,因此所有脚本参数最终都是函数内Invoke-Other $args中的嵌套数组。您可以通过检查函数内部和外部$args[0]的值来验证。当您使用函数的参数列表调用Python脚本时,嵌套数组会被破坏成一个字符串。

使用splatting将脚本的参数列表作为函数的单独参数传递:

$args.Count