Private/Get-NuPkgInfo.ps1
function Get-NuPkgInfo { <# .SYNOPSIS Parse NuPkg filename to extract package information. .PARAMETER FilePath Path to the NuPkg file. #> [CmdletBinding()] param( [Parameter(Mandatory)] [string]$FilePath ) $fileName = [System.IO.Path]::GetFileNameWithoutExtension($FilePath) Write-Verbose "Parsing filename: $fileName" # Try different regex patterns for NuPkg filename parsing $patterns = @( '^(.+?)\.(\d+(?:\.\d+){0,3}(?:-[\w\-\.]+)?)$', # Standard: PackageName.Version '^(.+)\.(\d+(?:\.\d+)*)$', # Simple: PackageName.Version (numeric only) '^(.+)-(\d+(?:\.\d+){0,3}(?:-[\w\-\.]+)?)$' # Alternative: PackageName-Version ) $packageName = $null $versionString = $null foreach ($pattern in $patterns) { if ($fileName -match $pattern) { $packageName = $matches[1] $versionString = $matches[2] Write-Verbose "Matched pattern '$pattern': Name='$packageName', Version='$versionString'" break } } if (-not $packageName -or -not $versionString) { Write-Warning "Could not parse package info from filename: $fileName" Write-Verbose "Tried patterns: $($patterns -join ', ')" return $null } # Clean version string and create Version object $cleanVersion = $versionString -replace '-.*$', '' Write-Verbose "Clean version: $cleanVersion" try { $version = [System.Version]::new($cleanVersion) Write-Verbose "Created version object: $version" } catch { Write-Verbose "Failed to create version object, trying fallback: $($_.Exception.Message)" # Fallback: try to create a valid version $versionParts = $cleanVersion -split '\.' if ($versionParts.Count -eq 1) { $version = [System.Version]::new([int]$versionParts[0], 0) } elseif ($versionParts.Count -eq 2) { $version = [System.Version]::new([int]$versionParts[0], [int]$versionParts[1]) } elseif ($versionParts.Count -eq 3) { $version = [System.Version]::new([int]$versionParts[0], [int]$versionParts[1], [int]$versionParts[2]) } else { $version = [System.Version]::new([int]$versionParts[0], [int]$versionParts[1], [int]$versionParts[2], [int]$versionParts[3]) } Write-Verbose "Fallback version object: $version" } try { $fileSize = [math]::Round((Get-Item $FilePath).Length / 1MB, 2) } catch { Write-Warning "Could not get file size for: $FilePath" $fileSize = 0 } $result = @{ Name = $packageName Version = $version VersionString = $versionString FilePath = $FilePath FileName = [System.IO.Path]::GetFileName($FilePath) Size = $fileSize LastModified = (Get-Item $FilePath).LastWriteTime } Write-Verbose "Package info result: Name='$($result.Name)', Version='$($result.Version)', Size='$($result.Size)' MB" return $result } |