【问题标题】:powershell.exe -file string array as parameterpowershell.exe -file 字符串数组作为参数
【发布时间】:2017-03-28 20:18:09
【问题描述】:

我实际上是在为监控解决方案编写一个带有 powershell 的插件。

此监控解决方案从命令行 cmd 运行 powershell 脚本。

其中一个输入参数是一个字符串数组,但看起来 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 脚本?我已经尝试了几乎所有的东西...... 使用 ^ 、括号、单引号、双引号等转义。但没有任何帮助...

感谢每一个提示:)

【问题讨论】:

标签: arrays windows powershell cmd parameters


【解决方案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

根据我的经验,使用 command 参数而不是 file 参数,然后将整个命令用引号括起来会使事情的行为更像你期望的那样,就好像你从 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 元素的数组。

【讨论】:

  • 使用 -command 对我来说不是一个选项。由于 -command 无法解释的返回码...
  • 您是指在 PoSh 脚本中使用 exit 1 之类的东西,还是其他?
  • 在 CMD 中使用这个 powershell.exe -command ".\Test-Script.ps1 -myarray bla1,bla2; exit $LASTEXITCODE" 源来自不同的 SO post
猜你喜欢
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 2017-06-14
相关资源
最近更新 更多