59 lines
2.0 KiB
PowerShell
59 lines
2.0 KiB
PowerShell
|
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
|
||
|
}
|
||
|
}
|