src/private/Invoke-GeneratePackagesConfig.ps1

function Invoke-GeneratePackagesConfig {
  [CmdletBinding()]
  param (
    [Parameter(Mandatory = $true)]
    [string]
    $OutputPath,
    [Parameter(Mandatory = $true)]
    $Packages
  )
    
  [xml]$doc = New-Object System.Xml.XmlDocument
  $declaration = $doc.CreateXmlDeclaration("1.0", "UTF-8", $null)
  $doc.AppendChild($declaration)
  $packagesRoot = $doc.CreateElement("packages", $null)

  if ( $Packages -is [PSObject] ) {
    $Packages.PSObject.Properties | ForEach-Object {
      $packageNode = $doc.CreateElement("package", $null)
      $packageNode.SetAttribute("id", $_.Name)
      $packageNode.SetAttribute("version", $_.Value)
      $packagesRoot.AppendChild($packageNode)
    }
  } else {
    foreach ($item in $Packages.GetEnumerator()) {
      $packageNode = $doc.CreateElement("package", $null)
      $packageNode.SetAttribute("id", $item.Name)
      $packageNode.SetAttribute("version", $item.Value)
      $packagesRoot.AppendChild($packageNode)
    }
  }

  $doc.AppendChild($packagesRoot)
  $doc.Save("$OutputPath\packages.config")
}