【问题标题】:Powershell - IEX syntax woesPowershell - IEX 语法问题
【发布时间】:2014-02-10 12:23:49
【问题描述】:

在向前一步和向后两步的几天之后,我仍在尝试获取一个命令的输出并将各种值分配回变量。在 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 或 & 调用 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:找不到接受参数“-->Output=XML”的位置参数。 在 C:\Program Files\GXFunpack\bin\mediainfo.v02.ps1:52 char:12 + $test = IEX

$test2 给出:

Invoke-Expression:无法将“System.Object[]”转换为参数“Command”所需的类型“System.String”。不支持指定的方法。 在 C:\Program Files\GXFunpack\bin\mediainfo.v02.ps1:54 char:13 + $test2 = IEX

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

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

但每次它都会吐出下一个神秘错误。

谁能告诉我我的方式的错误吗?

【问题讨论】:

  • 第一个失败是因为你在它想要一个的时候传入了三个字符串。第二个失败,因为您在需要一个字符串时传递了 1 个数组。当你运行 $test = Invoke-Expression "$tool $xmlswitch $filename" 时会发生什么?

标签: xml powershell


【解决方案1】:

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

试试:

$test = & $tool $xmlswitch $filename

请参阅http://blogs.msdn.com/b/powershell/archive/2011/06/03/invoke-expression-considered-harmful.aspx,了解有关为什么应避免使用 Invoke-Expression 的更多信息。

【讨论】:

    【解决方案2】:

    试试这个:

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

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

    【讨论】:

      猜你喜欢
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 2015-08-11
      相关资源
      最近更新 更多