Powershell - IEX语法问题

时间:2014-02-03 17:50:17

标签: xml powershell

经过前进一步和后退两步后的几天,我仍然试图获取一个命令的输出并将各种值分配回变量。在PS提示符下,我可以创建一个XML文件,然后使用以下命令成功解析数据:

MediaInfo.exe --output=XML <path-to-file> >> .\info_out.xml
$xml = [xml](Get-Content .\info_out.xml)

$xml.Mediainfo.File.track[1]

$xml.Mediainfo.File.track[1].Duration --> 5mn 0s
$xml.Mediainfo.File.track[1].Format --> MPEG Video
$xml.Mediainfo.File.track[1].Format_profile --> 4:2:2@High

现在我的问题是尝试使用IEX或&amp ;.调用MediaInfo --output = XML开关。 我宁愿不必每次都将XML写入文件,并且理想情况下喜欢使用xml函数而不必每次都写入/读取/清理XML文件时间。

这是我正在做的一个例子:

## Gather file info with MediaInfo (CLI) as XML
$tool = "C:\Program` Files\MediaInfoCLI\MediaInfo.exe"
$xmlswitch = "--Output=XML"
$Args = @("$tool", "$xmlswitch", "$filename" )

write-host "`n .............Testing.............. `n"
Write-Host "Executable: $tool"
Write-Host "XML switch: $xmlswitch"
Write-Host "Filename:   $filename"
Write-Host "Args: $Args `n `n"

$test = IEX $tool $xmlswitch $filename
write-host $test 
$test2 = IEX $Args
write-host $test2

exit 0

$ test给出:

  

Invoke-Expression:找不到接受参数' - &gt; Output = XML'的位置参数。   在C:\ Program Files \ GXFunpack \ bin \ mediainfo.v02.ps1:52 char:12   + $ test = IEX&lt;&lt;&lt;&lt; $ tool $ xmlswitch $ filename      + CategoryInfo:InvalidArgument:(:) [Invoke-Expression],ParameterBindingException      + FullyQualifiedErrorId:   PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeExpressionCommand

$ test2给出:

  

Invoke-Expression:无法将'System.Object []'转换为参数'Command'所需的类型'System.String'。不支持指定的方法。   在C:\ Program Files \ GXFunpack \ bin \ mediainfo.v02.ps1:54 char:13 + $ test2 = IEX&lt;&lt;&lt;&lt;的$ args      + CategoryInfo:InvalidArgument:(:) [Invoke-Expression],ParameterBindingException      + FullyQualifiedErrorId:CannotConvertArgument,Microsoft.PowerShell.Commands.InvokeExpressionCommand

我尝试了很多变体和语法偏差:

  • $ tool =“C:\ Program Files \ MediaInfoCLI \ MediaInfo.exe”
  • $ tool = C:\“Program Files”\ MediaInfoCLI \ MediaInfo.exe
  • IEX“$ tool $ xmlswitch $ filename”
  • “`-`-output = XML”
  • 还有很多很多......

但每次它只是吐出下一个神秘的错误。

有人能告诉我我的错误吗?

2 个答案:

答案 0 :(得分:2)

您可能只需要调用调用运算符'&amp;'。你绝对不需要Invoke-Expression。

尝试:

$test = & $tool $xmlswitch $filename

有关您应该避免调用表达式的原因的详细信息,请参阅http://blogs.msdn.com/b/powershell/archive/2011/06/03/invoke-expression-considered-harmful.aspx

答案 1 :(得分:1)

试试这个:

[xml]$xml = (MediaInfo.exe --output=XML <path-to-file>)

这应该运行您的命令并将输出收集到变量$xml