WinGetInfoObject.psm1

function Get-WinGetInfo {
        param(
            [string]$Name
        )
    $WingetRawOutput = winget show $Name --disable-interactivity
    $WingetRawOutput | Out-File -FilePath ".\WinGetShowOutputTemp.txt" -Force
    $outputString = Get-Content -Path ".\WinGetShowOutputTemp.txt"
    $MainHashTableObj = New-Object -TypeName pscustomobject
    $i = 1
    foreach ($splitStr in $outputString){
        if ($splitStr -match "Found"){
            $MainHashTableObj | Add-Member -MemberType "NoteProperty" -Name "Name" -Value $splitStr.Replace("Found ","") -Force
        }
        if ($splitStr -like "Description:"){
            $curIndex = $outputString.IndexOf("Description:")
            if ($outputString[$curIndex + 1] -match "Homepage:"){
                $nextIndex = $curIndex + 1
                $STRSplit = $splitStr | Split-String -RegexSeparator ":\s"
                $MainHashTableObj | Add-Member -MemberType "NoteProperty" -Name $STRSplit[0] -Value $STRSplit[1] -Force
            }
            else{
            if ($outputString[$curIndex + 2] -match "Homepage:"){
                $nextIndex = $curIndex + 2
            }
            if ($outputString[$curIndex + 3] -match "Homepage:"){
                $nextIndex = $curIndex + 3
            }
            if ($outputString[$curIndex + 4] -match "Homepage:"){
                $nextIndex = $curIndex + 4
            }
            if ($outputString[$curIndex + 5] -match "Homepage:"){
                $nextIndex = $curIndex + 5
            }
            if ($outputString[$curIndex + 6] -match "Homepage:"){
                $nextIndex = $curIndex + 6
            }
            if ($outputString[$curIndex + 7] -match "Homepage:"){
                $nextIndex = $curIndex + 7
            }
            if ($outputString[$curIndex + 8] -match "Homepage:"){
                $nextIndex = $curIndex + 8
            }
            if ($outputString[$curIndex + 9] -match "Homepage:"){
                $nextIndex = $curIndex + 9
            }
            if ($outputString[$curIndex + 10] -match "Homepage:"){
                $nextIndex = $curIndex + 10
            }
            for ($i=$curIndex + 1;$i -lt $nextIndex;$i++){
            $TempHold += $outputString[$i]
            }
            $MainHashTableObj | Add-Member -MemberType "NoteProperty" -Name "Description" -Value $TempHold.ToString().Replace(" ","")
        }
        }
        elseif ($splitStr -match "Tags:"){
            $curIndex = $outputString.IndexOf("Tags:")
            $nextIndex = $outputString.IndexOf("Installer:")
            for ($i=$curIndex + 1;$i -lt $nextIndex;$i++){
                $TempHold2 += ($outputString[$i].Replace(" ","") + ";")
                }
                $MainHashTableObj | Add-Member -MemberType "NoteProperty" -Name "Tags" -Value $TempHold2 -Force
        }
        elseif ($splitStr -match "Installer:"){
            $curIndex = $outputString.IndexOf("Installer:")
                $nextIndex = $curIndex + 4
            for ($i=$curIndex + 1;$i -lt $nextIndex;$i++){
                $TempHold3 += $outputString[$i]
                }
            foreach ($Temp in $TempHold3){
                $SplitTemp = $Temp | Split-String -RegexSeparator ":\s"
            $MainHashTableObj | Add-Member -MemberType "NoteProperty" -Name $SplitTemp[0].Replace(" ","") -Value $SplitTemp[1] -Force
            }
        }
        else {
            $TempVer = $splitStr | Split-String -RegexSeparator ":\s"
            if ($TempVer[0] -isnot [char] -and $null -ne $TempVer[0]){
            $MainHashTableObj | Add-Member -MemberType "NoteProperty" -Name $TempVer[0].Replace(" ","") -Value $TempVer[1] -Force -ErrorAction SilentlyContinue
        }
    }
        }
    return $MainHashTableObj
    }

    function Find-WinGetInfoPackages {
        param(
            [string]$Name
        )
        
        $returnObject = New-Object -TypeName pscustomobject
        $WingetRawOutput = winget search $Name --disable-interactivity
        $WingetRawOutput | Out-File -FilePath ".\WinGetSearchOutputTemp.txt" -Force
        $outputString = Get-Content -Path ".\WinGetSearchOutputTemp.txt"
        $IdList = @()
        $firstIndex = $outputString[1].IndexOf("Id")
        $maxLength = ($outputString[1].IndexOf("Version")) - $firstIndex
         for ($i=3;$i -lt $outputString.Count;$i++){
            $test = $outputString[$i]
            $test2 = $test.substring($firstIndex,$maxLength)
            $test4 = $test2 -split "\s"
            $Id = $test4[0]
            $IdList += $Id
        }
        foreach ($CurId in $IdList){
            $CurWinGetInfo = Get-WinGetInfo -Name $CurId
            $returnObject | Add-Member -MemberType NoteProperty -Name $CurId.Replace(".","-") -Value $CurWinGetInfo
        }
        return $returnObject
    }
    function Get-WinGetInfoList {
        param(
        [switch]$All,
        [string]$Id
        )
    
        $returnObject = New-Object -TypeName pscustomobject
        if ($All) {
        $WingetRawOutput = winget list --disable-interactivity
        }
        else {
            $WingetRawOutput = winget list $Id --disable-interactivity
        }
        $WingetRawOutput | Out-File -FilePath ".\WinGetSearchOutputTemp.txt" -Force
        $outputString = Get-Content -Path ".\WinGetSearchOutputTemp.txt"
        Write-Host "Output String [1]"
        Write-Host $outputString[2]
        $IdList = @()
        $firstIndex = $outputString[2].IndexOf("Id")
        $maxLength = ($outputString[2].IndexOf("Version")) - $firstIndex
        for ($i=4;$i -lt $outputString.Count;$i++){
            $test = $outputString[$i]
            $test2 = $test.substring($firstIndex,$maxLength)
            $test4 = $test2 -split "\s"
            $Id = $test4[0]
            $IdList += $Id
        }
        foreach ($CurId in $IdList){
            $CurWinGetInfo = Get-WinGetInfo -Name $CurId
            $returnObject | Add-Member -MemberType NoteProperty -Name $CurId.Replace(".","-") -Value $CurWinGetInfo
        }
        return $returnObject
    }