经过前进一步和后退两步后的几天,我仍然试图获取一个命令的输出并将各种值分配回变量。在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
我尝试了很多变体和语法偏差:
但每次它只是吐出下一个神秘的错误。
有人能告诉我我的错误吗?
答案 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
。