Данные PowerShell и exif в формате Json - PullRequest
0 голосов
/ 11 апреля 2020

Я сейчас пытаюсь выучить powershell. У меня есть некоторый код, который просматривает некоторые изображения .jpg, отправляет эти изображения в exiftool и выводит их exif-информацию в файл json. Затем я помещаю файл Json в powershell с помощью Get-Content, а затем преобразовываю его в объект PSO, используя ConvertFrom- Json. У меня проблемы с пониманием того, как получить доступ к нужным мне данным из PSObject. Например, я хотел бы получить FileName изображений и их настройки экспозиции. Я попытался psobject.properties.Name, который показывает мне только свойства PSObject, а не фактические объекты внутри. Затем я попробовал Get-Member и некоторые его свойства безрезультатно. Я считаю, что Get-Member - это маршрут, по которому я должен go, но я не совсем уверен, как его использовать.

Это очень сжатый пример Json:

[
    "[{",
    "  \"FileName\": \"DJI_0001.JPG\",",
    "  \"ExposureTime\": 0.005,",
    "},",
    "{",
    "  \"FileName\": \"DJI_0002.JPG\",",
    "  \"ExposureTime\": 0.003125,",
    "},",
    "{",
    "  \"FileName\": \"DJI_0004.JPG\",",
    "  \"ExposureTime\": 0.00625,",
    "}]"
]

Вот некоторый код, который я пробовал:

$scriptDir = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent

Write-Host "Procesing Files..."

$command = $scriptDir + '\exiftool.exe ' + $directory + ' -json -n -r -EXT JPG'

$allmetadata = Invoke-Expression $command

#Write-Host $allmetadata

$allmetadata | ConvertTo-Json | Out-File "$scriptDir\JsonOut.json" 

#########################################################################################################
#
# This Gets the Json File and converts it to a PSObject 
#
#########################################################################################################

$convertedmeta = Get-Content "$scriptDir/JsonOut.json" -Raw -Encoding UTF8 | ConvertFrom-Json

Write-Host $convertedmeta

#########################################################################################################
#
# This is code where I was trying to explore the information within the PSObject trying to figure out 
# where the FileName and ExpsoureTime are kept so I can call the values
#
#########################################################################################################

Write-Host "Exploring JSON File"
#$jsonInfoExplore = $convertedmeta.PsObject.Properties.Value.PsObject.Properties.Name
#$jsonInfoExplore = $convertedmeta.psobject.properties.Name
#$jsonInfoExplore = $convertedmeta.psobject.properties.Value
$jsonInfoExplore = $convertedmeta | Get-Member 

Write-Host $jsonInfoExplore

Как вы можете видеть, где Код был закомментирован, я пробовал несколько разных способов получить информацию, которую я ищу. Я просто не совсем понимаю, как вызвать данные из PSObject.

Любая помощь и рекомендации будут с благодарностью.

1 Ответ

0 голосов
/ 11 апреля 2020

Это json выглядит странно, как будто все сбежало. Вам придется конвертировать - json дважды .

cat file.json | convertfrom-json | convertfrom-json

FileName     ExposureTime
--------     ------------
DJI_0001.JPG        0.005
DJI_0002.JPG     0.003125
DJI_0004.JPG      0.00625

Это действительно должно выглядеть так: массив из трех объектов:

[{
  "FileName": "DJI_0001.JPG",
  "ExposureTime": 0.005,
},
{
  "FileName": "DJI_0002.JPG",
  "ExposureTime": 0.003125,
},
{
  "FileName": "DJI_0004.JPG",
  "ExposureTime": 0.00625,
}]
...