Строки версии для «System.Version» слишком длинные (или короткие) в PowerShell
Как я могу принудительно преобразовать тип в PowerShell или, что более вероятно, лучше понять, почему я не могу произвольно назначать числовые строки типа?
Мы загружаем некоторые обновления программного обеспечения в папки, названия которых содержат номера версий. Пытаясь получить отчеты о последних загруженных версиях, я сделал следующее быстро и грязно:
ForEach ($Folder in $(Get-ChildItem -Path $SoftwareDirectory -Directory))
{
$CurrentVersion = $Folder -Replace "[^0-9.]"
If ($CurrentVersion -ne $null)
{
If ([System.Version]$CurrentVersion -gt [System.Version]$MaxVersion)
{
$MaxVersion = $CurrentVersion
$MaxFolder = $Folder
}
}
}
Это будет заголовки каталогов, подобные следующим:
- foo-tools-1.12.файл
- бар-статический-3.4.0.файл
В большинстве случаев это приемлемо. Однако при встрече с некоторыми чудаками с более длинными числами, такими как следующие,
- апплет-4u331r364.файл
В таком случае,
System.Version
отклоняет результирующую строку как слишком длинную.
Cannot convert value "4331364" to type "System.Version". Error: "Version string portion was too short or too long."