powershell.exe -file字符串数组作为参数

时间:2017-03-28 20:18:10

标签: arrays windows powershell cmd parameters

我实际上正在编写一个带有PowerShell的插件,用于监控解决方案。

此监视解决方案从命令行cmd运行powershell skri。

其中一个输入参数是字符串数组,但看起来cmd无法将数组移交给powershell。

这是我写的一个示例脚本,用来解释你的问题:

param (
    [array]$myarray
)

Write-Host 'My array is a ' $myarray.GetType()
Write-Host 'How much value do I have in my array?' $myarray.count
Write-Host 'My content is' $myarray

当我从powershell控制台运行此脚本时,我的输出是正确的:

.\Test-Script.ps1 -myarray bla1, bla2

My array is a  System.Object[]
How much value do I have in my array? 2
My content is bla1 bla2

现在我从cmd运行相同的操作,并且数组不应该被解释为:

powershell.exe -file Test-Script.ps1 -myarray bla1, bla2

My array is a  System.Object[]
How much value do I have in my array? 1
My content is bla1,

我现在的问题是如何将数组提交到powershell脚本?我已经尝试了很多东西.... 用^,括号,单引号,双引号等转义。但没有任何帮助...

我感谢每一个提示:)

1 个答案:

答案 0 :(得分:1)

从CMD调用脚本时,请执行:

powershell.exe -command ".\Test-Script.ps1 -myarray bla1, bla2"

结果:

My array is a  System.Object[]
How much value do I have in my array? 2
My content is bla1 bla2

根据我的经验,使用命令参数而不是文件参数,然后将整个命令包装在引号中会使事情的行为更像您,并期望它们就像您从PoSh控制台运行一样。

另外,如果你想让你的param语句特定于字符串或字符串数​​组,你可以编写如下语句:

param (
    [string[]]$myarray
)
Write-Host 'My array is a ' $myarray.GetType()
Write-Host 'How much value do I have in my array?' $myarray.count
Write-Host 'My content is' $myarray

结果是:

My array is a  System.String[]
How much value do I have in my array? 2
My content is bla1 bla2

现在,它将接受一个包含任何类型元素的数组,具体取决于您的应用程序,您可能希望它只接受具有特定类型元素的数组。定义像[typename[]]这样的数组指定它是一个元素为typename的数组。