{"id":9343,"date":"2024-03-07T13:45:25","date_gmt":"2024-03-07T18:45:25","guid":{"rendered":"https:\/\/jdhitsolutions.com\/blog\/?p=9343"},"modified":"2024-03-07T13:48:47","modified_gmt":"2024-03-07T18:48:47","slug":"github-scripting-challenge-solution","status":"publish","type":"post","link":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/","title":{"rendered":"GitHub Scripting Challenge Solution"},"content":{"rendered":"<p>Earlier this year I appeared on the <a href=\"https:\/\/powershellpodcast.podbean.com\/e\/https:\/\/powershellpodcast.podbean.com\/e\/code-in-action-embracing-hands-on-learning-with-jeff-hicks\/code-in-action-embracing-hands-on-learning-with-jeff-hicks\/\">PowerShell Podcast<\/a>. I ended the interview with a scripting challenge.<\/p>\n<h2>The Core Challenge<\/h2>\n<p><em>Using whatever tools and techniques you want, write a PowerShell function that<br \/>\nwill query the Issues section of a GitHub repository and create output showing<br \/>\nthe number of open issues by label and the percentage of all open issues.<br \/>\nRemember that multiple labels may be used with an issue. For example, if there are 54 open issues and the bug label is used 23 times, your output would show a count of 23 and a total percentage of 42.59 for the bug label. The function should work for any GitHub repository, but test it with the PowerShell repository. Naturally, the function should follow community accepted best practices, have parameter validation, and proper error handling.<\/em><\/p>\n<h2>Bonus Challenge<\/h2>\n<p>I also included extra-credit for more experienced scripters.<\/p>\n<p><em>Once you have the function, add custom formatting to display the results in a table,including the repository name or path. Create an alternative view that will also display the repository and the label URI that GitHub uses to create a filtered page view. Finally, create a control script using the function to create a markdown report for the PowerShell repository showing the top 25 labels. The markdown report should have clickable links.<\/em><\/p>\n<h2>My Solution<\/h2>\n<p>I posted the challenge as a <a href=\"https:\/\/gist.github.com\/jdhitsolutions\/36f16e9b2d89353cfa93edc8e4b5b3c3\">gist<\/a> and asked people to submit their solutions by posting a comment with a link to their work. I encourage you to see how people approached the challenge. Of course, you are more than welcome to develop your own solution and share a link to your work.<\/p>\n<p>But here's how I approached the challenge. My solution is not necessarily the best way or only way to meet the requirements. But it is always educational to compare how people solve the same problem. In this case, many people might think the best approach is to use the GitHub API and <code>Invoke-RestMethod<\/code>. I chose a different approach.<\/p>\n<p>I am a big user of the GitHub command-line client, <em>gh.exe<\/em>. You can easily install it with <em>winget<\/em>.<\/p>\n<pre><code class=\"language-shell\">winget install --id github.cli --source winget<\/code><\/pre>\n<p>You will need to restart your PowerShell session before you can use the command. You'll also need to authenticate.<\/p>\n<pre><code class=\"language-shell\">gh auth login<\/code><\/pre>\n<p>Follow the prompts. Once you are authenticated, you can use the <code>gh<\/code> command to query GitHub without having to deal with API tokens, headers, and so on. What is especially compelling is that you can have <em>gh.exe<\/em> output JSON. This means I can use it in PowerShell.<\/p>\n<pre><code class=\"language-shell\">gh.exe issue list --repo jdhitsolutions\/psscripttools --limit 50 --json &#039;id,title,labels&#039; | ConvertFrom-Json<\/code><\/pre>\n<p>I wrote a PowerShell 7 function wrapped around this command.<\/p>\n<pre><code class=\"language-powershell\">Function Get-ghIssueLabelCount {\n    [cmdletbinding()]\n    [OutputType(&#039;ghLabelStatus&#039;)]\n    [alias(&#039;ghlc&#039;)]\n    Param(\n        [Parameter(\n            Position = 0,\n            Mandatory,\n            ValueFromPipeline,\n            HelpMessage = &#039;Specify the Github owner and repo in the format: owner\/repo. You might need to match casing with GitHub.&#039;\n        )]\n        [ValidateNotNullOrEmpty()]\n        [ValidatePattern(&#039;\\w+\/\\w+$&#039;, ErrorMessage = &#039;Please use the format OWNER\/Repository. e.g. jdhitsolutions\/psreleasetools&#039;)]\n        [string]$Repository,\n\n        [Parameter(HelpMessage = &#039;Specify the first X number of issue labels sorted by count in descending order.&#039;)]\n        [ValidateScript({ $_ -gt 0 }, ErrorMessage = &#039;Enter a value greater than 0.&#039;)]\n        [int]$First = 25,\n\n        [Parameter(HelpMessage = &#039;Specify the number of issues to analyze&#039;)]\n        [ValidateScript({ $_ -gt 0 }, ErrorMessage = &#039;Enter a value greater than 0.&#039;)]\n        [int]$Limit = 1000\n    )\n\n    Begin {\n        Write-Verbose &quot;[$((Get-Date).TimeOfDay) BEGIN  ] Starting $($MyInvocation.MyCommand)&quot;\n        Write-Verbose &quot;[$((Get-Date).TimeOfDay) BEGIN  ] Running under PowerShell version $($PSVersionTable.PSVersion)&quot;\n        Write-Verbose &quot;[$((Get-Date).TimeOfDay) BEGIN  ] Using host: $($Host.Name)&quot;\n        $ReportDate = Get-Date\n    } #begin\n\n    Process {\n        Try {\n            $gh = Get-Command -Name gh.exe -ErrorAction Stop\n            Write-Verbose &quot;[$((Get-Date).TimeOfDay) PROCESS] Using $( gh.exe --version | Select-Object -First 1)&quot;\n            Write-Verbose &quot;[$((Get-Date).TimeOfDay) PROCESS] Processing $Limit issues from $Repository&quot;\n            $ghData = gh.exe issue list --repo $Repository --limit $Limit --json &#039;id,title,labels&#039; | ConvertFrom-Json\n            Write-Verbose &quot;[$((Get-Date).TimeOfDay) PROCESS] Found $($ghData.count) items&quot;\n        } #Try\n        Catch {\n            Write-Warning &#039;This command requires the gh.exe command-line utility.&#039;\n        } #Catch\n\n        If ($ghData.count -gt 0) {\n            Write-Verbose &quot;[$((Get-Date).TimeOfDay) PROCESS] Getting top $First issue labels&quot;\n            $data = $ghData.labels |\n            Group-Object -Property Name -NoElement |\n            Sort-Object Count, Name -Descending |\n            Select-Object -First $First\n\n            foreach ($Item in $data) {\n                #create a custom object\n                if ($item.Name -match &#039;\\s&#039;) {\n                    $escName = &#039;%22{0}%22&#039; -f ($item.Name -replace &#039;\\s&#039;, &#039;+&#039;)\n                    $uri = &quot;https:\/\/github.com\/$Repository\/issues?q=is%3Aissue+is%3Aopen+label%3A$escName&quot;\n                }\n                else {\n                    $uri = &quot;https:\/\/github.com\/$Repository\/issues?q=is%3Aissue+is%3Aopen+label%3A$($Item.Name)&quot;\n                }\n                [PSCustomObject]@{\n                    PStypeName = &#039;ghLabelStatus&#039;\n                    Count      = $Item.Count\n                    PctTotal   = ($item.Count \/ $ghData.Count) * 100\n                    Label      = $Item.Name\n                    LabelUri   = $uri\n                    Repository = $Repository\n                    IssueCount = $ghData.Count\n                    ReportDate = $ReportDate\n                }\n            }\n        } #if data found\n        else {\n            Write-Warning &quot;No open issues found in $Repository&quot;\n        }\n    } #process\n\n    End {\n        Write-Verbose &quot;[$((Get-Date).TimeOfDay) END    ] Ending $($MyInvocation.MyCommand)&quot;\n    } #end\n}<\/code><\/pre>\n<p>The function groups the issues by label and writes a custom object to the pipeline.<\/p>\n<pre><code class=\"language-shell\">PS C:\\&gt; Get-ghIssueLabelCount -Repository jdhitsolutions\/psscripttools\n\nCount      : 4\nPctTotal   : 80\nLabel      : bug\nLabelUri   : https:\/\/github.com\/jdhitsolutions\/psscripttools\/issues?q=is%3Aissue+is%3Aopen+label%3Abug\nRepository : jdhitsolutions\/psscripttools\nIssueCount : 5\nReportDate : 3\/7\/2024 11:29:38 AM\n...<\/code><\/pre>\n<p>This should meet the basic requirements.<\/p>\n<h2>Formatting<\/h2>\n<p>When I created my custom object, I also defined a unique type name.<\/p>\n<pre><code class=\"language-powershell\"> [PSCustomObject]@{\n    PStypeName = &#039;ghLabelStatus&#039;\n    Count      = $Item.Count\n    PctTotal   = ($item.Count \/ $ghData.Count) * 100\n    Label      = $Item.Name\n    LabelUri   = $uri\n    Repository = $Repository\n    IssueCount = $ghData.Count\n    ReportDate = $ReportDate\n}<\/code><\/pre>\n<p>This allows me to create a custom format file using <a href=\"http:\/\/bit.ly\/31SGo5o\">New-PSFormatXML<\/a><\/p>\n<pre><code class=\"language-xml\">&lt;!--\nFormat type data generated 12\/04\/2023 12:58:47 by PROSPERO\\Jeff\n\nThis file was created using the New-PSFormatXML command that is part\nof the PSScriptTools module.\n\nhttps:\/\/github.com\/jdhitsolutions\/PSScriptTools\n--&gt;\n&lt;Configuration&gt;\n  &lt;ViewDefinitions&gt;\n    &lt;View&gt;\n      &lt;!--Created 12\/04\/2023 12:58:47 by PROSPERO\\Jeff--&gt;\n      &lt;Name&gt;default&lt;\/Name&gt;\n      &lt;ViewSelectedBy&gt;\n        &lt;TypeName&gt;ghLabelStatus&lt;\/TypeName&gt;\n      &lt;\/ViewSelectedBy&gt;\n      &lt;GroupBy&gt;\n        &lt;ScriptBlock&gt;&quot;{0} [{1}]&quot; -f $_.Repository,$_.ReportDate&lt;\/ScriptBlock&gt;\n        &lt;Label&gt;Repository&lt;\/Label&gt;\n      &lt;\/GroupBy&gt;\n      &lt;TableControl&gt;\n        &lt;!--Delete the AutoSize node if you want to use the defined widths.--&gt;\n        &lt;AutoSize \/&gt;\n        &lt;TableHeaders&gt;\n          &lt;TableColumnHeader&gt;\n            &lt;Label&gt;Count&lt;\/Label&gt;\n            &lt;Width&gt;8&lt;\/Width&gt;\n            &lt;Alignment&gt;right&lt;\/Alignment&gt;\n          &lt;\/TableColumnHeader&gt;\n          &lt;TableColumnHeader&gt;\n            &lt;Label&gt;PctTotal&lt;\/Label&gt;\n            &lt;Width&gt;8&lt;\/Width&gt;\n            &lt;Alignment&gt;right&lt;\/Alignment&gt;\n          &lt;\/TableColumnHeader&gt;\n          &lt;TableColumnHeader&gt;\n            &lt;Label&gt;Label&lt;\/Label&gt;\n            &lt;Width&gt;15&lt;\/Width&gt;\n            &lt;Alignment&gt;left&lt;\/Alignment&gt;\n          &lt;\/TableColumnHeader&gt;\n        &lt;\/TableHeaders&gt;\n        &lt;TableRowEntries&gt;\n          &lt;TableRowEntry&gt;\n            &lt;TableColumnItems&gt;\n              &lt;TableColumnItem&gt;\n                &lt;PropertyName&gt;Count&lt;\/PropertyName&gt;\n              &lt;\/TableColumnItem&gt;\n              &lt;TableColumnItem&gt;\n                &lt;ScriptBlock&gt;&quot;{0:p2}&quot; -f ($_.Count\/$_.IssueCount)&lt;\/ScriptBlock&gt;\n              &lt;\/TableColumnItem&gt;\n              &lt;TableColumnItem&gt;\n                &lt;PropertyName&gt;Label&lt;\/PropertyName&gt;\n              &lt;\/TableColumnItem&gt;\n            &lt;\/TableColumnItems&gt;\n          &lt;\/TableRowEntry&gt;\n        &lt;\/TableRowEntries&gt;\n      &lt;\/TableControl&gt;\n    &lt;\/View&gt;\n    &lt;View&gt;\n      &lt;!--Created 12\/04\/2023 15:18:46 by PROSPERO\\Jeff--&gt;\n      &lt;Name&gt;uri&lt;\/Name&gt;\n      &lt;ViewSelectedBy&gt;\n        &lt;TypeName&gt;ghLabelStatus&lt;\/TypeName&gt;\n      &lt;\/ViewSelectedBy&gt;\n      &lt;GroupBy&gt;\n        &lt;ScriptBlock&gt;\n        $link = $PSStyle.FormatHyperlink($_.Repository,&quot;https:\/\/github.com\/$($_.Repository)\/issues&quot;)\n        &quot;$($PSStyle.Foreground.Yellow +$PSStyle.Italic)$link$($PSStyle.Reset) [$($_.ReportDate)]&quot;\n        &lt;\/ScriptBlock&gt;\n        &lt;Label&gt;Repository&lt;\/Label&gt;\n      &lt;\/GroupBy&gt;\n      &lt;TableControl&gt;\n        &lt;!--Delete the AutoSize node if you want to use the defined widths.--&gt;\n        &lt;AutoSize \/&gt;\n        &lt;TableHeaders&gt;\n          &lt;TableColumnHeader&gt;\n            &lt;Label&gt;Count&lt;\/Label&gt;\n            &lt;Width&gt;8&lt;\/Width&gt;\n            &lt;Alignment&gt;right&lt;\/Alignment&gt;\n          &lt;\/TableColumnHeader&gt;\n          &lt;TableColumnHeader&gt;\n            &lt;Label&gt;PctTotal&lt;\/Label&gt;\n            &lt;Width&gt;8&lt;\/Width&gt;\n            &lt;Alignment&gt;right&lt;\/Alignment&gt;\n          &lt;\/TableColumnHeader&gt;\n          &lt;TableColumnHeader&gt;\n            &lt;Label&gt;Label&lt;\/Label&gt;\n            &lt;Width&gt;14&lt;\/Width&gt;\n            &lt;Alignment&gt;left&lt;\/Alignment&gt;\n          &lt;\/TableColumnHeader&gt;\n        &lt;\/TableHeaders&gt;\n        &lt;TableRowEntries&gt;\n          &lt;TableRowEntry&gt;\n            &lt;TableColumnItems&gt;\n              &lt;TableColumnItem&gt;\n                &lt;PropertyName&gt;Count&lt;\/PropertyName&gt;\n              &lt;\/TableColumnItem&gt;\n              &lt;TableColumnItem&gt;\n                &lt;ScriptBlock&gt;&quot;{0:p2}&quot; -f ($_.Count\/$_.IssueCount)&lt;\/ScriptBlock&gt;\n              &lt;\/TableColumnItem&gt;\n              &lt;TableColumnItem&gt;\n                &lt;ScriptBlock&gt;\n                  $link = $PSStyle.FormatHyperlink($_.Label,$_.LabelUri)\n                  &quot;$($PSStyle.Foreground.Yellow +$PSStyle.Italic)$link$($PSStyle.Reset)&quot;\n                &lt;\/ScriptBlock&gt;\n              &lt;\/TableColumnItem&gt;\n            &lt;\/TableColumnItems&gt;\n          &lt;\/TableRowEntry&gt;\n        &lt;\/TableRowEntries&gt;\n      &lt;\/TableControl&gt;\n    &lt;\/View&gt;\n  &lt;\/ViewDefinitions&gt;\n&lt;\/Configuration&gt;<\/code><\/pre>\n<p>The default view displays the issues in a table with the repository name and date.<\/p>\n<pre><code class=\"language-shell\">PS C:\\&gt; Get-ghIssueLabelCount -Repository jdhitsolutions\/psscripttools\n\n   Repository: jdhitsolutions\/psscripttools [3\/7\/2024 11:36:35 AM]\n\nCount PctTotal Label\n----- -------- -----\n    4   80.00% bug\n    2   40.00% triage\n    2   40.00% enhancement\n    1   20.00% pending feedback<\/code><\/pre>\n<p>The alternate view uses PSStyle to insert hyperlinks.<\/p>\n<pre><code class=\"language-xml\">&lt;Name&gt;uri&lt;\/Name&gt;\n    &lt;ViewSelectedBy&gt;\n        &lt;TypeName&gt;ghLabelStatus&lt;\/TypeName&gt;\n    &lt;\/ViewSelectedBy&gt;\n    &lt;GroupBy&gt;\n        &lt;ScriptBlock&gt;\n            $link = $PSStyle.FormatHyperlink($_.Repository,&quot;https:\/\/github.com\/$($_.Repository)\/issues&quot;)\n            &quot;$($PSStyle.Foreground.Yellow +$PSStyle.Italic)$link$($PSStyle.Reset) [$($_.ReportDate)]&quot;\n        &lt;\/ScriptBlock&gt;\n    &lt;Label&gt;Repository&lt;\/Label&gt;\n    &lt;\/GroupBy&gt;<\/code><\/pre>\n<p>Using Windows Terminal, I now have clickable links.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2024\/03\/ghissue-formatted.png\" alt=\"format view\" \/><\/p>\n<h2>Control Script<\/h2>\n<p>The last part of the challenge was to write a control script to create a markdown report.<\/p>\n<pre><code class=\"language-powershell\">#requires -version 7.4\n\n#ghLabelReport.ps1\nParam(\n    [Parameter(\n        Position = 0,\n        Mandatory,\n        ValueFromPipeline,\n        HelpMessage = &#039;Specify the Github owner and repo in the format: owner\/repo. You might need to match casing with GitHub.&#039;\n    )]\n    [ValidateNotNullOrEmpty()]\n    [ValidatePattern(&#039;\\w+\/\\w+$&#039;, ErrorMessage = &#039;Please use the format OWNER\/Repository. e.g. jdhitsolutions\/psreleasetools&#039;)]\n    [string]$Repository,\n\n    [Parameter(HelpMessage = &#039;Specify the first X number of issue labels sorted by count in descending order.&#039;)]\n    [ValidateScript({ $_ -gt 0 }, ErrorMessage = &#039;Enter a value greater than 0.&#039;)]\n    [int]$First = 25,\n\n    [Parameter(HelpMessage = &#039;Specify the number of issues to analyze&#039;)]\n    [ValidateScript({ $_ -gt 0 }, ErrorMessage = &#039;Enter a value greater than 0.&#039;)]\n    [int]$Limit = 1000\n\n)\n\n#dot source the required function\n. $PSScriptRoot\\Get-ghIssueStats.ps1\n\n$data = Get-ghIssueLabelCount @PSBoundParameters\n\nif ($data) {\n    $repoIssues = &quot;https:\/\/github.com\/$($data[0].Repository)\/issues&quot;\n    $md = [System.Collections.Generic.List[string]]::New()\n    $md.Add(&quot;# Label Report for [$($data[0].Repository)]($repoIssues)`n&quot;)\n    $md.Add(&quot;This is the breakdown of labels based on __$($data[0].IssueCount)__ open issues. Total percentages might be more than 100% as issues can have multiple labels.`n&quot;)\n    $md.Add(&quot;Count| Percent of Total | Label|&quot;)\n    $md.Add(&quot;|-----|-----|-----|&quot;)\n    foreach ($item in $data) {\n        $md.Add(&quot;| $($item.count) | $([math]::Round($item.PctTotal,2)) | [$($item.Label)]($($item.LabelUri))|&quot;)\n    }\n\n    $md.Add(&quot;`n_$($data[0].ReportDate)_&quot;)\n}\n\n#write the markdown to the pipeline\n$md<\/code><\/pre>\n<p>The script writes markdown to the pipeline. If I want a file, I can use <code>Out-File<\/code><\/p>\n<pre><code class=\"language-powershell\">C:\\scripts\\ghLabelReport.ps1 -Repository jdhitsolutions\/psscripttools | Out-File c:\\temp\\psscripttools-issues.md<\/code><\/pre>\n<p>Here's the report for the PowerShell repository.<\/p>\n<pre><code class=\"language-powershell\">C:\\scripts\\ghLabelReport.ps1 -Repository powershell\/powershell | Out-File c:\\temp\\powershell-issues.md<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2024\/03\/powershell-issue-report-1.png\" alt=\"PowerShell Github Issue report\" \/><\/p>\n<h2>Summary<\/h2>\n<p>Sometimes it helps to think outside the box or even backwards. I knew what data I needed to construct the objects I wanted. Then it was a matter of finding the best technique to get me the data. In my case, I opted for a command-line tool. This adds a dependency for anyone else who wants to try my code. But it made it very easy for me to write the code.<\/p>\n<p>I will post my files as a <a href=\"https:\/\/gist.github.com\/jdhitsolutions\/30cd246fd99dd442e4a75ddf0261c2ce\">GitHub gist<\/a> so you don't have to try and copy from here. If you have questions or comments on the code, please post them as comments on the gist.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Earlier this year I appeared on the PowerShell Podcast. I ended the interview with a scripting challenge. The Core Challenge Using whatever tools and techniques you want, write a PowerShell function that will query the Issues section of a GitHub repository and create output showing the number of open issues by label and the percentage&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[499,4],"tags":[495,534,540],"class_list":["post-9343","post","type-post","status-publish","format-standard","hentry","category-github","category-powershell","tag-github","tag-powershell","tag-scripting"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>GitHub Scripting Challenge Solution &#8226; The Lonely Administrator<\/title>\n<meta name=\"description\" content=\"My solution for the PowerShell scripting challenge to report on issue labels for a given GitHub repository.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GitHub Scripting Challenge Solution &#8226; The Lonely Administrator\" \/>\n<meta property=\"og:description\" content=\"My solution for the PowerShell scripting challenge to report on issue labels for a given GitHub repository.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/\" \/>\n<meta property=\"og:site_name\" content=\"The Lonely Administrator\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-07T18:45:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-07T18:48:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2024\/03\/ghissue-formatted.png\" \/>\n<meta name=\"author\" content=\"Jeffery Hicks\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@JeffHicks\" \/>\n<meta name=\"twitter:site\" content=\"@JeffHicks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeffery Hicks\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/9343\\\/github-scripting-challenge-solution\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/9343\\\/github-scripting-challenge-solution\\\/\"},\"author\":{\"name\":\"Jeffery Hicks\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\"},\"headline\":\"GitHub Scripting Challenge Solution\",\"datePublished\":\"2024-03-07T18:45:25+00:00\",\"dateModified\":\"2024-03-07T18:48:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/9343\\\/github-scripting-challenge-solution\\\/\"},\"wordCount\":653,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\"},\"image\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/9343\\\/github-scripting-challenge-solution\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/ghissue-formatted.png\",\"keywords\":[\"GitHub\",\"PowerShell\",\"Scripting\"],\"articleSection\":[\"GitHub\",\"PowerShell\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/9343\\\/github-scripting-challenge-solution\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/9343\\\/github-scripting-challenge-solution\\\/\",\"url\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/9343\\\/github-scripting-challenge-solution\\\/\",\"name\":\"GitHub Scripting Challenge Solution &#8226; The Lonely Administrator\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/9343\\\/github-scripting-challenge-solution\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/9343\\\/github-scripting-challenge-solution\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/ghissue-formatted.png\",\"datePublished\":\"2024-03-07T18:45:25+00:00\",\"dateModified\":\"2024-03-07T18:48:47+00:00\",\"description\":\"My solution for the PowerShell scripting challenge to report on issue labels for a given GitHub repository.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/9343\\\/github-scripting-challenge-solution\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/9343\\\/github-scripting-challenge-solution\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/9343\\\/github-scripting-challenge-solution\\\/#primaryimage\",\"url\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/ghissue-formatted.png\",\"contentUrl\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/ghissue-formatted.png\",\"width\":902,\"height\":243},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/powershell\\\/9343\\\/github-scripting-challenge-solution\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"GitHub\",\"item\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/category\\\/github\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GitHub Scripting Challenge Solution\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/\",\"name\":\"The Lonely Administrator\",\"description\":\"Practical Advice for the Automating IT Pro\",\"publisher\":{\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/jdhitsolutions.com\\\/blog\\\/#\\\/schema\\\/person\\\/d0258030b41f07fd745f4078bdf5b6c9\",\"name\":\"Jeffery Hicks\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\",\"caption\":\"Jeffery Hicks\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GitHub Scripting Challenge Solution &#8226; The Lonely Administrator","description":"My solution for the PowerShell scripting challenge to report on issue labels for a given GitHub repository.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/","og_locale":"en_US","og_type":"article","og_title":"GitHub Scripting Challenge Solution &#8226; The Lonely Administrator","og_description":"My solution for the PowerShell scripting challenge to report on issue labels for a given GitHub repository.","og_url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/","og_site_name":"The Lonely Administrator","article_published_time":"2024-03-07T18:45:25+00:00","article_modified_time":"2024-03-07T18:48:47+00:00","og_image":[{"url":"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2024\/03\/ghissue-formatted.png","type":"","width":"","height":""}],"author":"Jeffery Hicks","twitter_card":"summary_large_image","twitter_creator":"@JeffHicks","twitter_site":"@JeffHicks","twitter_misc":{"Written by":"Jeffery Hicks","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/#article","isPartOf":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/"},"author":{"name":"Jeffery Hicks","@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9"},"headline":"GitHub Scripting Challenge Solution","datePublished":"2024-03-07T18:45:25+00:00","dateModified":"2024-03-07T18:48:47+00:00","mainEntityOfPage":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/"},"wordCount":653,"commentCount":2,"publisher":{"@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9"},"image":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/#primaryimage"},"thumbnailUrl":"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2024\/03\/ghissue-formatted.png","keywords":["GitHub","PowerShell","Scripting"],"articleSection":["GitHub","PowerShell"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/","url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/","name":"GitHub Scripting Challenge Solution &#8226; The Lonely Administrator","isPartOf":{"@id":"https:\/\/jdhitsolutions.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/#primaryimage"},"image":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/#primaryimage"},"thumbnailUrl":"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2024\/03\/ghissue-formatted.png","datePublished":"2024-03-07T18:45:25+00:00","dateModified":"2024-03-07T18:48:47+00:00","description":"My solution for the PowerShell scripting challenge to report on issue labels for a given GitHub repository.","breadcrumb":{"@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/#primaryimage","url":"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2024\/03\/ghissue-formatted.png","contentUrl":"https:\/\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2024\/03\/ghissue-formatted.png","width":902,"height":243},{"@type":"BreadcrumbList","@id":"https:\/\/jdhitsolutions.com\/blog\/powershell\/9343\/github-scripting-challenge-solution\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"GitHub","item":"https:\/\/jdhitsolutions.com\/blog\/category\/github\/"},{"@type":"ListItem","position":2,"name":"GitHub Scripting Challenge Solution"}]},{"@type":"WebSite","@id":"https:\/\/jdhitsolutions.com\/blog\/#website","url":"https:\/\/jdhitsolutions.com\/blog\/","name":"The Lonely Administrator","description":"Practical Advice for the Automating IT Pro","publisher":{"@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jdhitsolutions.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/jdhitsolutions.com\/blog\/#\/schema\/person\/d0258030b41f07fd745f4078bdf5b6c9","name":"Jeffery Hicks","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg","caption":"Jeffery Hicks"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/832ae5d438fdcfc1420d720cd1991307927de8a0b12f2342e81c30f773e21098?s=96&d=wavatar&r=pg"}}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":8787,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/8787\/prerelease-of-psfunctiontools-for-powershell\/","url_meta":{"origin":9343,"position":0},"title":"Prerelease of PSFunctionTools for PowerShell","author":"Jeffery Hicks","date":"January 13, 2022","format":false,"excerpt":"At the end of last year wrote a series of blog posts describing tools and techniques for working with PowerShell scripts and functions. My goal was to build a framework of tools that I could use to automate PowerShell scripting work, such as creating a new module from a group\u2026","rel":"","context":"In &quot;PowerShell&quot;","block_context":{"text":"PowerShell","link":"https:\/\/jdhitsolutions.com\/blog\/category\/powershell\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2022\/01\/psfunctiontools-commands.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2022\/01\/psfunctiontools-commands.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2022\/01\/psfunctiontools-commands.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2022\/01\/psfunctiontools-commands.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2022\/01\/psfunctiontools-commands.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2022\/01\/psfunctiontools-commands.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":5373,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/5373\/creating-a-github-repository-from-powershell\/","url_meta":{"origin":9343,"position":1},"title":"Creating a GitHub Repository from PowerShell","author":"Jeffery Hicks","date":"January 13, 2017","format":false,"excerpt":"I've been continuing to work with the GitHub API in PowerShell. Today I have a function you can use to create a new GitHub repository. Of course you will need to have a GitHub account and another piece of critical information, but after that it is quite easy to create\u2026","rel":"","context":"In &quot;GitHub&quot;","block_context":{"text":"GitHub","link":"https:\/\/jdhitsolutions.com\/blog\/category\/github\/"},"img":{"alt_text":"image","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2017\/01\/image_thumb-6.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2017\/01\/image_thumb-6.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2017\/01\/image_thumb-6.png?resize=525%2C300 1.5x"},"classes":[]},{"id":5833,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/5833\/new-powershell-projects-published\/","url_meta":{"origin":9343,"position":2},"title":"New PowerShell Projects Published","author":"Jeffery Hicks","date":"December 18, 2017","format":false,"excerpt":"Last week I published a few of the recent PowerShell modules I've been working on to the PowerShell Gallery. These projects had been in a beta phase while I worked out some last minute features. I was also waiting to see if there were any issues reported by you that\u2026","rel":"","context":"In &quot;PowerShell&quot;","block_context":{"text":"PowerShell","link":"https:\/\/jdhitsolutions.com\/blog\/category\/powershell\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2017\/12\/image_thumb-6.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2017\/12\/image_thumb-6.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2017\/12\/image_thumb-6.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":4533,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/4533\/powershell-pivot-tables-revisited\/","url_meta":{"origin":9343,"position":3},"title":"PowerShell Pivot Tables Revisited","author":"Jeffery Hicks","date":"September 26, 2015","format":false,"excerpt":"A few years ago I wrote a PowerShell function to create an Excel-like pivot table in a PowerShell console. The other day I decided to revisit the function. I was surprised that it didn't really need too much updating but I did spend some time updating the documentation and adding\u2026","rel":"","context":"In &quot;PowerShell&quot;","block_context":{"text":"PowerShell","link":"https:\/\/jdhitsolutions.com\/blog\/category\/powershell\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":5410,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/5410\/creating-a-github-gist-with-powershell\/","url_meta":{"origin":9343,"position":4},"title":"Creating a Github Gist with PowerShell","author":"Jeffery Hicks","date":"January 26, 2017","format":false,"excerpt":"Recently I posted a PowerShell tool for creating a GitHub repository. In continuing my exploration of the GitHub API I wrote another PowerShell tool to create a GitHub gist. A gist is simple way to store and share snippets or code samples. I use them to share simple PowerShell scripts\u2026","rel":"","context":"In &quot;GitHub&quot;","block_context":{"text":"GitHub","link":"https:\/\/jdhitsolutions.com\/blog\/category\/github\/"},"img":{"alt_text":"image","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2017\/01\/image_thumb-18.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2017\/01\/image_thumb-18.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2017\/01\/image_thumb-18.png?resize=525%2C300 1.5x"},"classes":[]},{"id":5132,"url":"https:\/\/jdhitsolutions.com\/blog\/powershell\/5132\/downloading-git-tips-with-powershell\/","url_meta":{"origin":9343,"position":5},"title":"Downloading Git Tips with PowerShell","author":"Jeffery Hicks","date":"June 27, 2016","format":false,"excerpt":"So I've been sharing a number of PowerShell tools I've created for working with Git, including a few for getting tips from the Git Tips project on GitHub. My initial work was based on the fact that I had a local clone of that repository and wanted to search the\u2026","rel":"","context":"In &quot;Git&quot;","block_context":{"text":"Git","link":"https:\/\/jdhitsolutions.com\/blog\/category\/git\/"},"img":{"alt_text":"getting all online git tips with PowerShell","src":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2016\/06\/image_thumb-22.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2016\/06\/image_thumb-22.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/jdhitsolutions.com\/blog\/wp-content\/uploads\/2016\/06\/image_thumb-22.png?resize=525%2C300 1.5x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/9343","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=9343"}],"version-history":[{"count":1,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/9343\/revisions"}],"predecessor-version":[{"id":9344,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/9343\/revisions\/9344"}],"wp:attachment":[{"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=9343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=9343"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jdhitsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=9343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}