Powershell - условие для проверки установки правильной версии AppX
Я пытаюсь создать скрипт Powershell, в котором он автоматизирует установку приложений и принтеров, необходимых для работы. Большая часть скрипта работает отлично, единственное, чего нет, - это условие, которое я поместил для пропуска шага.
Сценарий использует WinGet для установки большинства приложений. WinGet требует установщика настольных приложений Microsoft версии 1.12.11692.0 или выше для работы Winget. Если эта версия не установлена, установите ее и продолжайте выполнение сценария. Если он установлен, продолжайте выполнение сценария, не предлагая пользователю установить установщик настольных приложений Microsoft.
$AppInstallerVersion = Get-AppxPackage Microsoft.DesktopAppInstaller | Select Version
Write-Host "Microsoft Desktop App Installer Version:" $AppInstallerVersion
if ($AppInstallerVersion -eq "1.12.11692.0")
{
Write-Host "Microsoft Desktop App Installer is equal or higher to the version needed for this script to work, continuing the script."
.\(pathtoInstallationscript).ps1
}
else
{
Write-Host "Microsoft Desktop App Installer does not meet the minimum version to run this script, a window will now appear to install the version required for this script the run. Click on Update to install it.
Once installed, press the Enter key in the script to continue."
.\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
pause
.\(PathtoInstallationscript).ps1
}
До сих пор я пробовал следующее после части -eq условия:
Создайте вторую переменную, в которой есть строка с номером версии.
Введите номер версии прямо в него (как показано в примере выше).
Введите @ {Version = 1.12.11692.0} вместо строки.
Введите номер версии без кавычек ("")
Странно то, что иногда это странно срабатывало, но при повторном тестировании скрипта он просто ломался.
2 ответа
Вы используете равенство, но, похоже, предполагаете, что оно означает равное или большее, и, учитывая точку @Olaf, вы можете захотеть привести строки версии к
Поэтому я бы предложил попробовать что-то вроде этого:
if ([Version]$AppInstallerVersion -ge [Version]"1.12.11692.0") {
Write-Host "Microsoft Desktop App Installer is equal or higher to the version needed for this script to work, continuing the script."
.\(pathtoInstallationscript).ps1
}
Я решил это, изменив переменную $AppInstallerVersion и само условие. Потребовалось много проб и ошибок, но теперь он работает! Подсказка заключалась в том, что [Версия] не может быть преобразована. На самом деле это не была строка или System.Version. Скорее это был объект PSObject, поэтому его пришлось изменить на .Version, который выводит только номер версии. Что потом можно сравнить со строкой.
$AppInstallerVersion = Get-AppxPackage Microsoft.DesktopAppInstaller
if ($AppInstallerVersion.Version -ge "1.12.11692.0")