scripts/Normalize-MsBuild.ps1

function Normalize-MsBuild {
    [CmdletBinding()]
    param (
        [Parameter(Position = 0, Mandatory = $false)]
        [object]$item,

        [Parameter(Position = 1, Mandatory = $false)]
        [hashtable]$config = @{}
        )    
    process {
        $ErrorActionPreference = "Stop"
        if (-not $item) {
            return $null
        }

        $msbuild = @{
            project = (Normalize-Path $item.project $config);
            targets = $item.targets;
            properties = $item.properties;
        }

        if ($item -is [string]) {
            $msbuild.project = (Normalize-Path $item $config)
        } elseif ($item.GetType() -ne [hashtable]) {
          throw "Unknown msbuild item type: $($item.GetType().Name)"
        }

        return $msbuild
    }
}