Public/Get-iPilotAutomationJobLogs.ps1
Function Get-iPilotAutomationJobLogs { <# .Description Retrieves logs from an Azure Automation Runbook .Parameter AutomationResourceGroupName Azure Automation Resource Group Name .Parameter AutomationAccountName Azure Automation Account Name .Parameter RunbookName Azure Automation Account Runbook Name .Example Get-iPilotAutomationJobLogs -AutomationResourceGroupName "contoso-automation-rg" -AutomationAccountName "Contoso-AutomationAccount" -RunbookName "SynciPilotUsers" #> Param ( [System.String] [Parameter(Mandatory = $true)] $AutomationResourceGroupName, [System.String] [Parameter(Mandatory = $true)] $AutomationAccountName, [System.String] [Parameter(Mandatory = $true)] $RunbookName ) # Import/Install Az.Accounts Write-Output "Importing/Installing prerequisite Az.Accounts module" if ((Get-Module -ListAvailable).Name -notcontains "Az.Accounts") { Try { Import-Module Az.Accounts } Catch { Install-Module Az.Accounts } } # Import/Install Az.Automation Write-Output "Importing/Installing prerequisite Az.Automation module" if ((Get-Module -ListAvailable).Name -notcontains "Az.Automation") { Try { Import-Module Az.Automation } Catch { Install-Module Az.Automation } } Login-AzAccount # Start Azure Automation Job $StartJob = Read-Host -Prompt "Start new iPilot User Sync Azure Runbook Automation Job? Y or N" if ($StartJob -eq "Y") { $AutomationRunbookJob = Start-AzAutomationRunbook -ResourceGroupName $AutomationResourceGroupName ` -AutomationAccountName $AutomationAccountName -Name $RunbookName } else { $AutomationRunbookJob = Get-AzAutomationJob ` -ResourceGroupName $AutomationResourceGroupName ` -AutomationAccountName $AutomationAccountName | Select-Object RunbookName, StartTime, EndTime, Status, JobId | Out-GridView -Title "Select Job to get logs for:" -PassThru } $doLoop = $true While ($doLoop) { $AutomationRunbookJob = Get-AzAutomationJob -ResourceGroupName $AutomationResourceGroupName ` -AutomationAccountName $AutomationAccountName -Id $AutomationRunbookJob.JobId $status = $AutomationRunbookJob.Status $doLoop = (($status -ne "Completed") -and ($status -ne "Failed") -and ($status -ne "Suspended") -and ($status -ne "Stopped")) Write-Host "$(Get-Date) | Waiting for $($AutomationRunbookJob.RunbookName) Azure Automation Job to complete...(Status: $($AutomationRunbookJob.Status))" } $JobOutputRecords = Get-AzAutomationJobOutput ` -ResourceGroupName $AutomationResourceGroupName ` -AutomationAccountName $AutomationAccountName -Id $AutomationRunbookJob.JobId -Stream Any | Get-AzAutomationJobOutputRecord # Grid View $Logs = $JobOutputRecords | Select-Object time, @{Name = 'Message' ; Expression = { $_.Value.Values } } | Format-Table -Wrap $LogFilePath = "$($env:APPDATA)\iPilot\$($AutomationRunbookJob.StartTime.DateTime | Get-Date -Format FileDateTime)-iPilotUserSync.log" $Logs | Out-File $LogFilePath -Force -Verbose # View logs with coloring Invoke-RestMethod "https://gist.github.com/mklement0/243ea8297e7db0e1c03a67ce4b1e765d/raw/Out-HostColored.ps1" | Invoke-Expression $Logs | Out-HostColored @{ 'ERROR' = 'red' 'VERBOSE' = 'yellow' 'DEBUG' = 'magenta' } -WholeLine } |