将数组传递给PowerShell脚本

6

我正在尝试将一个数组传递到PowerShell脚本中,但我只得到了一个值。我已经搜索了很多,但还是没找到任何有用的信息。我只需要将数组传递给脚本即可。以下是我的代码:

param($Location)
($location).count

Foreach ($loc in $Location)
{

$loc

}

这是我要运行的命令:

C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe -ExecutionPolicy Unrestricted  -File "C:\ParaTestingArray.ps1" -location Sydney,London

以下是输出结果:

1
悉尼

我已经尽力无法获取数组中的其他值。 我尝试使用

param([string[]]$Location)

我尝试过:

-location "Sydney","London"
-location @(Sydney,London)
-location Sydney London
-location Sydney,London
-location (Sydney,London)

我做错了什么?

1
你是从一个 PowerShell 脚本传递到另一个 PowerShell 脚本吗? - Austin T French
1
问题在于脚本期望一个数组,但是当你运行 powershell.exe -file ...(等等)时,输入字符串 @('a','b','c') 没有被强制转换为数组。如果你从 PowerShell 提示符中运行脚本,则不会出现这个问题。 - Bill_Stewart
1
AdqBill - 我需要将脚本放入计划任务中,每个任务都提供不同的位置。如果不使用我的方法,你会如何运行这个脚本呢? - user2142466
AthomSefre - 不,我只想将一个数组发送到PowerShell脚本。 - user2142466
3个回答

8
请使用-command开关代替。
就像这样:
powershell -Command "&{C:\ParaTestingArray.ps1 -Location A,B,C}"

关于PowerShell:

如果想要编写一个运行Windows PowerShell命令的字符串,请使用以下格式:

     "& {<command>}"

引号表示字符串,而调用运算符 (&) 则会执行该命令。


1

我无法复现那个结果:

$script = @'
param($Location)
($location).count

Foreach ($loc in $Location)
{

$loc

}
'@

$script | sc test.ps1

.\test.ps1 sydney,london

2 悉尼 伦敦

编辑: 这个有效:

$args.count

Foreach ($loc in $args)
{

$loc

}

命令为:powershell.exe -file c:\test.ps1 sydney london


谢谢 mjolinor。 你的方式让我得到了与你相同的结果。 我的方法有什么问题吗? 你能试着用我的方式,然后告诉我你得到了什么结果吗?再次感谢!!! - user2142466
如果我这样调用它,我会得到和你一样的结果。不确定你会怎么做。 - mjolinor
1
我认为问题在于没有办法将数组作为CMD字符串参数呈现。您需要使用分隔符字符串并对其进行拆分。 - mjolinor
$args 意味着“传递给脚本或函数的参数”。它可以像数组一样进行迭代。 - Bill_Stewart
当您需要使用命名参数传递数组时,即当两个args填充同一参数时,此技术无法工作。在迭代$args变量时显示的是迭代两个不同的参数。Fridden的答案是使用powershell.exe将数组传递给脚本的正确方法。 - Orlando Colamatteo

0

这个

Powershell.exe -Command "&{C:\script.ps1 -ParmArray 1,2,3}"

这个技巧对我很有用 - 但它感觉很不正规。在我的其他PowerShell经验之后,绝对是违反直觉的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接