Чтобы расширить мой комментарий:
Я бы не советовал менять класс wmi, который вам не нужен, но вы этого не делаете.Я не вижу ничего плохого в вашем подходе, кроме добавления члена к определенному стандартному библиотечному классу (System.Version
) и выполнения сравнения чисел со строкой.
Я бы предложил создатьa [pscustomobject]
с нужными членами:
function Get-OSVersion {
$OSVersion = [version](Get-CimInstance -ClassName Win32_OperatingSystem).Version
if ($OSVersion.Major -ge 10) {
[pscustomobject]@{
Version = $OSVersion
ReleaseId = [int](Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').ReleaseId
}
} else {
[pscustomobject]@{
Version = $OSVersion
}
}
}
Используется:
$OS = Get-OSVersion
if ($OS.Version -ge [version]'6.1') {
'At least Win7'
} else {
'Too old'
}
if ($OS.ReleaseId -ge 1703) {
'At least 1703.'
} else {
'Too old'
}
Для использования альтернативы: используйте хеш-таблицу, поскольку она выглядит так, как будто вы простовыполнение доступа к ключу / значению и сравнение без какой-либо реализации метода.
function Get-OSVersion {
$OS = @{
Version = [version](Get-CimInstance -ClassName Win32_OperatingSystem).Version
}
if ($OS.Version.Major -ge 10) {
$OS['ReleaseId'] = [int](Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').ReleaseId
}
return $OS
}