#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-символ является обратным знаком, но в регулярных выражениях это все равно обратная косая черта.