我不太了解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"。
答案 0 :(得分:1)
当你调用$diff = $finish_time_ob->diffInDays($start_time_ob);
时,参数列表作为单个(数组)参数传递,因此所有脚本参数最终都是函数内Invoke-Other $args
中的嵌套数组。您可以通过检查函数内部和外部$args[0]
的值来验证。当您使用函数的参数列表调用Python脚本时,嵌套数组会被破坏成一个字符串。
使用splatting将脚本的参数列表作为函数的单独参数传递:
$args.Count