Private/Get-DotNetFrameworkVersion.ps1

function private:Get-DotNetFrameworkVersion
{
        <#
            .EXTERNALHELP HelperFunctions.psm1-Help.xml
        #>

    [CmdletBinding()]
    [OutputType([System.Object])]
    param
    (
        [Parameter(Mandatory = $false,
                 Position = 0)]
        [String]$ComputerName = $env:COMPUTERNAME
    )

    Begin
    {
        $dotNetRegistry = 'SOFTWARE\Microsoft\NET Framework Setup\NDP'
        $dotNet4Registry = 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full'
        
    }
    process
    {
        foreach ($Computer in $ComputerName)
        {
            $regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Computer)
            if ($regKey)
            {
                if ($netRegKey = $regKey.OpenSubKey("$dotNetRegistry"))
                {
                    foreach ($versionKeyName in $netRegKey.GetSubKeyNames())
                    {
                        if ($versionKeyName -match '^v[123]')
                        {
                            $versionKey = $netRegKey.OpenSubKey($versionKeyName)
                            $version = [version]($versionKey.GetValue('Version', ''))
                            New-Object -TypeName PSObject -Property @{
                                ComputerName = $Computer
                                NetFXBuild   = $version.Build
                                NetFXVersion = $version.Major + '.' + $version.Minor
                            } | Select-Object ComputerName, NetFXBuild, NetFXVersion
                        }
                    }
                }
                
                if ($net4RegKey = $regKey.OpenSubKey("$dotNet4Registry"))
                {
                    if (-not ($net4Release = $net4RegKey.GetValue('Release')))
                    {
                        $net4Release = 378389
                    }
                    
                    if (-not ($net4Version = $net4RegKey.GetValue('Version')))
                    {
                        $net4Version = '4.0.0'
                    }
                    New-Object -TypeName PSObject -Property @{
                        ComputerName = $Computer
                        NetFXBuild   = $net4Release
                        NetFXVersion = $net4Version
                    } | Select-Object ComputerName, NetFXBuild, NetFXVersion
                }
            }
            else
            {
                New-Object -TypeName PSObject -Property @{
                    ComputerName = $Computer
                    NetFXBuild   = ""
                    NetFXVersion = "Error retrieving information."
                } | Select-Object ComputerName, NetFXBuild, NetFXVersion
            }
        }
    }
    end
    {}
}#end function Get-DotNetFrameworkVersion