«Не удается найти указанный файл» — Powershell

#windows #powershell

#Windows #powershell

Вопрос:

Я написал эту функцию в своем профиле powershell:

 function start {
    if ($args[0] == "blender") {
        Invoke-Item 'C:Program FilesBlender FoundationBlender 2.90blender.exe'
    }
}
  

Это выдает ошибку ниже в строке 1, в символе 1:

Не удается найти указанный файл

Путь к файлу указан правильно, поскольку, если я скопирую и вставлю код Invoke-Item ... в свой powershell, он нормально откроет Blender. В чем может заключаться проблема?

Спасибо!

Комментарии:

1. Разве вы не имеете в виду -эквалайзер?

Ответ №1:

Это происходит, поскольку имя вашей функции сталкивается с. Start-Process :

 get-alias -Name start

CommandType     Name                               Version    Source
-----------     ----                               -------    ------
Alias           start -> Start-Process
  

Переименование функции является первым шагом для исправления следующим образом,

 function start-myApps {
    if ($args[0] == "MyApplication") {
        Invoke-Item 'C:Program FilesMyApplicationMyApplication.exe'
    }
}
  

Но этого недостаточно, так как это выдает другую ошибку:

 Start-MyApps "MyApplication"
= : The term '=' 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:2 char:19
      if ($args[0] == "MyApplication") {
                    ~
      CategoryInfo          : ObjectNotFound: (=:String) [], ParentContainsErrorRecordException
      FullyQualifiedErrorId : CommandNotFoundException
  

Это вызвано тем, что оператор сравнения равенства Powershell -eq , а не == .

Рабочая версия имеет другое имя и оператор, например,

 function start-myApps {
    if ($args[0] -eq "MyApplication") {
        Invoke-Item 'C:Program FilesMyApplicationMyApplication.exe'
    }
}
  

Комментарии:

1. Это сработало! Большое спасибо за помощь, я не новичок в программировании, но очень новичок в powershell 🙂

2. @EnricoCortinovis Еще одна распространенная ошибка заключается в том, что в параметрах функции в определении используются запятые, а в вызовах используются пробелы. Если вы используете запятые в вызове, параметры преобразуются в массив. Третьим распространенным является то, что escape-символ является обратным знаком, но в регулярных выражениях это все равно обратная косая черта.