ps/Modules/Alkami.DevOps.TeamCity/Public/Get-DotnetExtraSDKs.ps1

59 lines
2.0 KiB
PowerShell
Raw Normal View History

2023-05-30 22:51:22 -07:00
Function Get-DotnetExtraSDKs {
<#
.SYNOPSIS
Delete extra runtimes for dotnet. Ensure that we only keep the latest around.
This assumes that minors are as distinct as majors. Supply the flag RemoveNonMajorDupes to get non-latest minors per major.
.PARAMETER RemoveNonMajorDupes
Only consider majors as "unique"
.PARAMETER ReturnExpiredSdks
Returns the out of date SDKs
.EXAMPLE
Get-DotnetExtraSDKs
#>
[CmdletBinding()]
[OutputType([System.Array])]
param(
[switch]$RemoveNonMajorDupes,
[switch]$ReturnExpiredSdks
)
$logLead = Get-LogLeadName
$deleteSdks = @()
$allSdks = @{}
$sdks = dotnet --list-sdks
Write-Host "$logLead : Dotnet SDKs installed on local machine:"
foreach ($sdk in $sdks) {
Write-Host "$logLead : $sdk"
$sdkParentPath = (($sdk -split '\[')[1] -split '\]')[0]
$sdkApp = "SDK"
$sdkVersion = [System.Version]($sdk -split ' ')[0]
$sdkPath = (Join-Path $sdkParentPath $sdkVersion)
if ($allSdks.Keys -notcontains $sdkApp) {
Write-Verbose "$logLead : adding version $sdkPath"
$allSdks[$sdkApp] = @{ Version = [System.Version]$sdkVersion; Path = $sdkPath; };
}
if ($allSdks[$sdkApp].Version.Major -lt $sdkVersion.Major) {
} elseif ($allSdks[$sdkApp].Version.Minor -lt $sdkVersion.Minor -and $RemoveNonMajorDupes) {
Write-Verbose "$logLead : adding delete sdk $($allSdks[$sdkApp].Path)"
$deleteSdks += $allSdks[$sdkApp].Path;
} elseif ($allSdks[$sdkApp].Version.Build -lt $sdkVersion.Build) {
Write-Verbose "$logLead : adding delete sdk $($allSdks[$sdkApp].Path)"
$deleteSdks += $allSdks[$sdkApp].Path;
}
$allSdks[$sdkApp] = @{ Version = $sdkVersion; Path = $sdkPath; };
}
Write-Host "$logLead : Dotnet SDKs that should be deleted/out of date:"
foreach ($deleteSdk in $deleteSdks) {
Write-Host "$logLead : $deleteSdk"
}
if ($ReturnExpiredSdks) {
Return $deleteSdks
}
}