From: Ardis Lu Date: Thu, 29 Aug 2024 03:41:32 +0000 (-0700) Subject: Properly check for non-existent properties X-Git-Url: https://git.ardis.lu/?a=commitdiff_plain;h=eb7acc19632a1f90946dcdce86b6e33df6eca6d2;p=ArdisUtilities Properly check for non-existent properties In strict mode, accessing a non-existent property throws an error instead of returning $null. --- diff --git a/ArdisUtilities/ArdisUtilities.psm1 b/ArdisUtilities/ArdisUtilities.psm1 index be53235..3d08e8b 100644 --- a/ArdisUtilities/ArdisUtilities.psm1 +++ b/ArdisUtilities/ArdisUtilities.psm1 @@ -767,47 +767,65 @@ function Get-HelpAsMarkdown { process { $help = Get-Help $Cmdlet + $properties = $help.PSobject.Properties.Name - $output.Add("# $($help.Name)") # Using .Name instead of $Cmdlet will use the capitalization intended by the cmdlet author + if ($properties -contains 'Name') { + $output.Add("# $($help.Name)") # Using .Name instead of $Cmdlet will use the capitalization intended by the cmdlet author + } - $output.Add('```') - $output.Add($($help.syntax | Out-String -NoNewline)) - $output.Add('```') + if ($properties -contains 'syntax') { + $output.Add('```') + $output.Add($($help.syntax | Out-String -NoNewline)) + $output.Add('```') + } - $output.Add('## Synopsis') - $output.Add($help.Synopsis) + if ($properties -contains 'Synopsis') { + $output.Add('## Synopsis') + $output.Add($help.Synopsis) + } - $output.Add('## Description') - $output.Add($($help.description | Out-String -NoNewline)) + if ($properties -contains 'description') { + $output.Add('## Description') + $output.Add($($help.description | Out-String -NoNewline)) + } - $output.Add('## Parameters') - foreach ($parameter in $help.parameters.parameter | Where-Object { $_.Name -notin $commonParameters }) { - $output.Add("### -$($parameter.Name)") - $output.Add($($parameter.Description | Out-String -NoNewline)) - $output.Add('```yaml') - $output.Add("Type: $($parameter.Type.Name)") - $output.Add("Required: $($parameter.Required)") - $output.Add("Position: $($parameter.Position)") - $output.Add("Default value: $($parameter.DefaultValue)") - $output.Add("Accept pipeline input: $($parameter.PipelineInput)") - $output.Add('```') + if ($properties -contains 'parameters') { + $output.Add('## Parameters') + foreach ($parameter in $help.parameters.parameter | Where-Object { $_.Name -notin $commonParameters }) { + $output.Add("### -$($parameter.Name)") + $output.Add($($parameter.Description | Out-String -NoNewline)) + $output.Add('```yaml') + $output.Add("Type: $($parameter.Type.Name)") + $output.Add("Required: $($parameter.Required)") + $output.Add("Position: $($parameter.Position)") + $output.Add("Default value: $($parameter.DefaultValue)") + $output.Add("Accept pipeline input: $($parameter.PipelineInput)") + $output.Add('```') + } } - $output.Add('## Examples') - $counter = 1 - foreach ($example in $help.examples.example) { - $output.Add("### Example $counter") - $output.Add('```powershell') - $output.Add("PS> $($example.Code)") - $output.Add($(($example.Remarks | Out-String).TrimEnd())) - $output.Add('```') - $counter++ + if ($properties -contains 'examples') { + $output.Add('## Examples') + $counter = 1 + foreach ($example in $help.examples.example) { + $output.Add("### Example $counter") + $output.Add('```powershell') + $output.Add("PS> $($example.Code)") + $output.Add($(($example.Remarks | Out-String).TrimEnd())) + $output.Add('```') + $counter++ + } } - if ($null -ne $help.relatedLinks) { + if ($properties -contains 'relatedLinks') { $output.Add('## Related Links') foreach ($link in $help.relatedLinks.navigationLink) { - $text = $link.linkText ?? $link.uri + if ('linkText' -in $link.PSobject.Properties.Name) { + $text = $link.linkText + } + else { + $text = $link.uri + } $output.Add("- $($text)") } }