单个变量中的多个参数

时间:2017-09-11 12:10:27

标签: powershell

尝试使用包含多个参数值的少数变量。

$iniFileContent["Settings"].GetEnumerator() | Select -ExpandProperty value | ForEach-Object {
    Convert-WindowsImage -SourcePath $iniFileContent.Locations.ServerISO $_
}

脚本查看我的.ini文件:

[Settings]
CreateVM1=-VHDFormat "VHDX" -Edition "ServerStandardEval"
CreateVM2=-VHDFormat "VHDX" -Edition "ServerStandardEval"

[Locations]
ServerISO=C:\server2012.iso

最终结果应为:

Convert-WindowsImage -SourcePath $iniFileContent.Locations.ServerISO -VHDFormat "VHDX" -Edition "ServerStandardEval"

错误是“找不到接受参数[...]的位置参数。”根据我的理解,问题出现是因为变量$_包含多个参数值,它试图用作单个参数。

将具有多个参数值的字符串解析为函数的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

使用Invoke-Expression cmdlet

  

语法

Invoke-Expression [-Command] <String> [<CommonParameters>]
     

描述

     

Invoke-Expression cmdlet评估或运行指定的字符串   命令并返回表达式或命令的结果。   没有Invoke-Expression,在命令行提交一个字符串   将被返回(回显)不变。

我使用iex别名而不是完整Invoke-Expression仅仅是为了更好的可读性:

$iniFileContent["Settings"].GetEnumerator() | 
  Select -ExpandProperty value | ForEach-Object {
    iex $("Convert-WindowsImage -SourcePath $($iniFileContent.Locations.ServerISO) " + $_)
}