我实际上正在编写一个带有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脚本?我已经尝试了很多东西.... 用^,括号,单引号,双引号等转义。但没有任何帮助...
我感谢每一个提示:)
答案 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
的数组。