Functions/Set-ReadmeSection.ps1

Function Set-ReadmeSection {

  Param(
    [string] $ReadmeFilePath,
    [string] $SectionName,
    [string] $Content,
    [string] $HeaderLevel = "#",
    [switch] $Prepend
  )
  if([System.IO.File]::Exists($ReadmeFilePath) -eq $false){
      Set-Content $ReadmeFilePath -Value ""
  }
  $Content = @"
<!--- $($SectionName) START --->
$($Content)
<!--- $($SectionName) END --->
"@

  $readmeContent = [System.IO.File]::ReadAllText($ReadmeFilePath)

  if([String]::IsNullOrEmpty($Content)){
      Write-Host "Updating $($ReadmeFilePath) section $($SectionName) - Removing"
      $readmeContent = $readmeContent -replace "((?:`r?`n|^)#+ *$($SectionName)[^`n]*`n)([\s\S]+?)(`n#|$)", "`$3"
  }
  elseif($readmeContent -match "<!--- *$($SectionName) *START --->([\s\S]*?)<!--- *$($SectionName) *END --->"){
      $_readmeContent = $readmeContent -replace "<!--- *$($SectionName) *START --->([\s\S]*?)<!--- *$($SectionName) *END --->", $Content
      if($_readmeContent -ne $readmeContent){
          Write-Host "Updating $($ReadmeFilePath) section $($SectionName) - Changes"
          [System.IO.File]::WriteAllText($ReadmeFilePath, $_readmeContent)
      }
      else{
          Write-Host "Updating $($ReadmeFilePath) section $($SectionName) - No changes"
      }
  }
  else{
      Write-Host "Adding $($ReadmeFilePath) section $($SectionName)"
      if($Prepend){
          $readmeContent = "$(if($HeaderLevel){"$($HeaderLevel) $($SectionName)`n"})$($Content)`n$($readmeContent)"
      }
      else{
          $readmeContent = "$($readmeContent)`n$(if($HeaderLevel){"$($HeaderLevel) $($SectionName)`n"})$($Content)"
      }
      [System.IO.File]::WriteAllText($ReadmeFilePath, $readmeContent)
  }


}