Я получаю журналы фабрики данных Azure для анализа с помощью Powershell.
Я успешно извлекаю журнал верхнего уровня (конвейер) и журнал, вложенный в него (действия), и записываю в текстовый файл.
Однако у меня проблемы с выравниванием файла действий, который состоит из набора плоских записей и полей, содержащих json
Вот мой сокращенный сценарий. Проблема связана с последним вызовом командлета. Мне нужно разобраться, как сгладить это до того, что мне нужно
$DateFrom = (new-object System.DateTime 2018, 07, 01)
$DateTo = Get-Date
$Pipeline="MyPipeline"
$Outputfile="C:\SRC\ADF\$Pipeline.TXT"
$OutputSubfile="C:\SRC\ADF\$Pipeline.Sub.TXT"
$DFname ="MyDataFactory"
$RG="MyRG"
$TenantId="a16xxxx-xxx-xxx"
$Subscription="d8xxx-xxx-xxx"
$Credential = Get-Credential
Connect-AzureRmAccount `
-TenantId $TenantId `
-Subscription $Subscription `
-Credential $Credential
$oADFLog = Get-AzureRmDataFactoryV2PipelineRun `
-ResourceGroupName $RG `
-DataFactoryName $DFname `
-LastUpdatedAfter $DateFrom `
-LastUpdatedBefore $DateTo `
-PipelineName $Pipeline
# This is the pipeline log - it works as required
$oADFLog | Export-Csv -Path $Outputfile -Delimiter "`t" -NoTypeInformation
# Delete the subtask file
Remove-Item -Path $oADFSubLog -Force -Recurse -ErrorAction Ignore
Foreach ($PipelineRun IN $oADFLog)
{
# For each parent run ID, check the child tasks
# File results in thispart need to be cleaned up
$oADFSubLog = Get-AzureRmDataFactoryV2ActivityRun `
-PipelineRunId $PipelineRun.RunId `
-ResourceGroupName $PipelineRun.ResourceGroupName `
-DataFactoryName $PipelineRun.DataFactoryName `
-RunStartedAfter $DateFrom `
-RunStartedBefore $DateTo
# This is the activity log - it has nested data types and is ugly
# I need to flatten the Json inside the message
$oADFSubLog | Export-Csv -Append -Path $OutputSubfile -Delimiter "`t" -NoTypeInformation
}
Учитывая $oADFSubLog
в вышеприведенном скрипте, я обнаружил, что могу вытащить какой-то кусок, который мне нужен, например:
(ConvertFrom-Json -InputObject $oADFSubLog[0].Input.ToString()).packageLocation
Это вытаскивает свойство, которое мне нужно, из Json
Но я не уверен, как легко выдвинуть это в файл вместе с другими плоскими атрибутами
Я пробовал это, что на самом деле просто удар в темноте
$oADFSubLog | Select-Object -Property ActivityName,@(ConvertFrom-Json -InputObject $oADFSubLog[0].Input.ToString()).packageLocation
Но я получаю
Select-Object: невозможно преобразовать System.Management.Automation.PSObject
к одному из следующих типов {System.String,
System.Management.Automation.ScriptBlock}.
Я видел несколько примеров пользовательских командлетов и сценариев, которые можно добавить, но я пока не хочу туда идти - я просто хочу понять, как это сделать.