【发布时间】:2019-01-03 18:06:53
【问题描述】:
我想传递给脚本的所有参数并执行。
例如,给定execute.ps1 脚本:
Invoke-Expression $($args[0])
我可以跑:
.\execute.ps1 hostname
myhostname
与此脚本的两个参数相同:
Invoke-Expression "$($args[0]) $($args[1])"
并通过以下方式执行它:
.\execute.ps1 echo foo
foo
如何使脚本通用以支持未知数量的参数?
例如:
.\execute.ps1 echo foo bar buzz ...
我尝试了以下失败的组合:
Invoke-Expression $args
Invoke-Expression:无法将“System.Object[]”转换为参数“Command”所需的类型“System.String”。不支持指定的方法。
Invoke-Expression [system.String]::Join(" ", $args)
Invoke-Expression:找不到接受参数“System.Object[]”的位置参数。
Invoke-Expression $args.split(" ")
Invoke-Expression:无法将“System.Object[]”转换为参数“Command”所需的类型“System.String”。不支持指定的方法。
Invoke-Expression [String] $args
Invoke-Expression:找不到接受参数“System.Object[]”的位置参数。
【问题讨论】:
-
您不能只为您的 .ps1 文件指定输入参数吗?
-
我需要动态的,不知道有多少参数。当我使用 aws-ecr-login.ps1 登录到不同的 AWS 角色并执行 docker 命令时,我有一个用例。然后我想允许用户将参数传递给脚本,所以它在登录过程之后被调用,但可能有未知数量的参数。用例并不重要,因此我尽可能简化了示例。