После нескольких дней одного шага вперед и в два шага назад я все еще пытаюсь получить вывод одной команды и присваивать переменные значения различным значениям. Из PS строки, я могу создать файл XML, а затем успешно анализировать данные с помощью:Powershell - синтаксис IEX
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:[email protected]
Теперь моя проблема при попытке вызвать --output = XML переключатель MediaInfo с IEX или &. Я бы предпочел не писать 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
$ тест дает:
Invoke-Expression: Позиционный параметр не может быть найден, который принимает аргумент «-> Output = XML ». В C: \ Program Files \ GXFunpack \ Bin \ mediainfo.v02.ps1: 52 символ: 12 + $ тест = IEX < < < < $ инструмент $ xmlswitch $ имя_файла + CategoryInfo: InvalidArgument: (:) [Invoke- Выражение], ParameterBindingException + FullyQualifiedErrorId: PositionalParameterNotFound, Microsoft.PowerShell.Commands.InvokeExpressionCommand
$ test2 дает:
Invoke-Expression: Невозможно преобразовать 'System.Object [] к type 'System.String', требуемый параметром 'Command'. Указанный метод не поддерживается. В C: \ Program Files \ GXFunpack \ Bin \ mediainfo.v02.ps1: 54 символ: 13 + $ test2 = IEX < < < < $ Args + CategoryInfo: InvalidArgument: (:) [Invoke-Expression], ParameterBindingException + FullyQualifiedErrorId: CannotConvertArgument, Microsoft.PowerShell.Commands.InvokeExpressionCommand
Я попытался так много вариаций и отклонений синтаксиса:
- $ инструмент = «C: \ Program Files \ MediaInfoCLI \ MediaInfo.exe "
- $ инструмент = C: \ "Program Files" \ MediaInfoCLI \ MediaInfo.exe
- IEX "$ инструмент $ xmlswitch $ имя_файла"
- "` -`-выход = XML"
- и многое, многое другое ...
Но каждый раз, когда он просто плюет назад на следующую загадочную ошибку.
Может ли кто-нибудь показать мне ошибки моего пути, пожалуйста?
Первый неудачный, потому что вы проходите в трех строках, когда он хочет его. Второе не получается, потому что вы передаете 1 массив, когда он хочет строку. что происходит, когда вы запускаете '$ test = Invoke-Expression '$ tool $ xmlswitch $ filename" '? – Cole9350