Если вы введете переменную $verCheckOS
, произойдет нечто более интересное:
[version]$verCheckOS = (Get-WmiObject win32_operatingsystem).version
При запуске предоставленного вами кода мы получим ошибку:
if($verCheckOS -lt 6) { write-host -ForeGroundColor Red "Version is too low, $verCheckOS" }
Else { write-host -ForegroundColor Green "OS version is good, $verCheckOS" }
Could not compare "10.0.17134" to "6". Error: "Cannot convert value "6" to type "System.Version".
Error: "Version string portion was too short or too long.""
At line:1 char:8
Чтов данном случае переменная $verCheckOS
теперь является типом данных [version]
, а одиночное целое число 6
не может быть преобразовано в тип данных [version]
.Для преобразования требуется как минимум 2 октета, поскольку тип данных [version]
представлен следующим образом:
Major Minor Build Revision
----- ----- ----- --------
10 0 17134 -1
Существует несколько способов справиться с этим в зависимости от того, какое число вы используете.пытаюсь сравнить.Если вы просто хотите сравнить октет версии Major, вы можете сравнить целые числа в отличие от версий:
if($verCheckOS.Major -lt 6) { write-host -ForeGroundColor Red "Version is too low, $verCheckOS" }
Else { write-host -ForegroundColor Green "OS version is good, $verCheckOS" }
Это даст положительный результат, экстраполируя номер версии Majorи создание целочисленного к целочисленному сравнению.
Если вы хотите сравнить реальные «версии», то вам нужно будет обеспечить сравнение с двумя объектами версий, вот пример:
[version]$verCheckOS = (Get-WmiObject win32_operatingsystem).version
[version]$verCompare = "6.0"
if($verCheckOS -lt $verCompare) { write-host -ForeGroundColor Red "Version is too low, $verCheckOS" }
Else { write-host -ForegroundColor Green "OS version is good, $verCheckOS" }
Чтобы увидеть преобразование строки в версию в действии или попытаться проанализировать ваши собственные номера версий, используйте класс [version]
.NET, например:
[version]::new("6.0")