Если в другом выражении выдается ошибка при установке приложения в powershell - PullRequest
0 голосов
/ 22 сентября 2018

Создание сценария для установки Программного обеспечения в Windows через PowerShell, однако при этом возникает ошибка, код которой приведен ниже.

 $software = Get-WmiObject -Class win32_product | Where-Object -FilterScript { $_.Name -like "*myapplication*"} 
if ($software.Version -ne "1.0.0")  {msiexec.exe /i 'C:\Program Files\myapplication.msi' /qr} {Write-host "Executing the upgrade"} 
else
{
Write-host "Correct version is installed"
}

Логика заключается в том, что желаемая версия приложения не равнаv1.0.0, затем запустите установщик или получите сообщение, что установлена ​​правильная версия, я могу установить приложение, если желаемое условие версии не выполнено, однако, если версия является желаемой, то должно появиться «Правильная версия установлена»"но нет, это дает какую-то ошибку в отношении другого утверждения, как показано ниже:

The term 'else' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:3 char:5
+ else <<<< 
+ CategoryInfo          : ObjectNotFound: (else:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Я долго ломаю голову, гадая, где я ошибаюсь, также нет места после утверждения else, Пожалуйста, помогите!

1 Ответ

0 голосов
/ 22 сентября 2018

Проблема

К сожалению, это сообщение об ошибке не очень полезно.Большинство языков говорят что-то вроде:

Иначе без if

* else должен следовать как следующий блок операторов после if:

if ($software.Version -ne "1.0.0")  {
    msiexec.exe /i 'C:\Program Files\myapplication.msi' /qr
} # If block finished, expecting elseif or else
{
    Write-host "Executing the upgrade"
} 
else # Else without if?!
{
    Write-host "Correct version is installed"
}

Разрешение

Необходимо устранить проблему, убрав закрывающие и открывающие фигурные скобки между msiexec и Write-Host, перенеся эти операторы в блок if, так как они оба должнывыполняться, когда это условие верно.

Если вы должны держать операторы msiexec и Write-Host в одной строке, используйте точку с запятой для их разделения.например,

if ($software.Version -ne "1.0.0")  {
    msiexec.exe /i 'C:\Program Files\myapplication.msi' /qr;Write-host "Executing the upgrade"
} 
else
{
    Write-host "Correct version is installed"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...