Как запустить следующую команду в PowerShell?
C: \ Program Files \ IIS \ Microsoft Web Deploy \ msdeploy.exe -verb: sync -source: dbfullsql = "Источник данных = mysource; Интегрированная безопасность = false; ID пользователя = sa; Pwd = sapass!; База данных = mydb;" -dest: dbfullsql = "Источник данных =. \ mydestsource; Интегрированная безопасность = false; ID пользователя = sa; Pwd = sapass!; База данных = mydb;", имя_компьютера = 10.10.10.10, имя пользователя = администратор, пароль = adminpass "
# Show any available updates to globally installed npm packages using the npm-check-updates tool [string] $cmd = 'ncu -g' Write-Verbose -Message $cmd Invoke-Command -ScriptBlock ([ScriptBlock]::Create($cmd))
Ответы:
Когда PowerShell видит команду, начинающуюся со строки, он просто оценивает строку, то есть обычно выводит ее на экран, например:
Если вы хотите, чтобы PowerShell интерпретировал строку как имя команды, используйте оператор вызова (&) следующим образом:
После этого вам, вероятно, нужно только заключить в кавычки пары параметр / аргумент, содержащие пробелы и / или символы кавычек. Когда вы вызываете такой EXE-файл со сложными аргументами командной строки, обычно очень полезно иметь инструмент, который покажет вам, как PowerShell отправляет аргументы в EXE-файл. PowerShell Community Extensions имеет такой инструмент. Это называется эхомарки. Вы просто замените EXE-файл на echoargs, оставив все аргументы на месте, и он покажет вам, как EXE-файл получит эти аргументы, например:
Используя echoargs, вы можете экспериментировать, пока не сделаете все правильно, например:
Оказывается, я слишком старался, чтобы сохранить двойные кавычки вокруг строки подключения. Очевидно, что в этом нет необходимости, потому что даже cmd.exe удалит их.
Кстати, снимаю шляпу перед командой PowerShell. Они очень помогли мне показать конкретное заклинание одинарных и двойных кавычек, чтобы получить желаемый результат - если вам нужно было сохранить внутренние двойные кавычки на месте. :-) Они также понимают, что это - область боли, но они движимы количеством людей, затронутых определенной проблемой. Если это для вас проблема, пожалуйста, проголосуйте за это сообщение об ошибке PowerShell .
Для получения дополнительной информации о синтаксическом анализе PowerShell см. Мою серию блогов Effective PowerShell, в частности, пункт 10 «Общие сведения о режимах синтаксического анализа PowerShell».
ОБНОВЛЕНИЕ 4/4/2012: С этой ситуацией намного легче справиться в PowerShell V3. Смотрите этот блог для деталей .
источник
echoargs
дает представление о том, как PowerShell интерпретирует аргументы, прежде чем передать их в EXE.& 'C:\Program Files\Sublime Text 3\sublime_text.exe'
прямо в консоли, и это работает, но в командном файле я получаю сообщение об ошибке «& было неожиданно в это время».START C:\"Program Files"\"Sublime Text 3"\sublime_text.exe
Просто добавьте оператор & перед именем .exe. Вот команда для установки SQL Server Express в режиме молчания:
источник
У меня были пробелы как в команде, так и в параметрах, и вот что у меня сработало:
По сути, это то же самое, что и ответ Акиры, но это работает, если вы динамически строите параметры вашей команды и помещаете их в переменную.
источник
EchoArgs
Это сработало для меня:
Просто поместите пути или строки соединения в один элемент массива и разбейте остальные элементы в одном элементе массива каждый.
Здесь есть много других вариантов: https://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx
Microsoft должна сделать этот способ более простым и совместимым с синтаксисом командной строки.
источник
Есть немало методов, которые вы можете использовать для этого.
Способ 1
Простой пример
В твоем случае
В этом методе вы разделяете каждый параметр в ArgumentList с помощью запятых.
Способ 2
Простой пример
В твоем случае
Этот метод проще, так как позволяет вводить параметры за один раз.
Рекомендации: Powershell / Scripting / Start-Process
источник
Смотрите эту страницу: https://slai.github.io/posts/powershell-and-external-commands-done-right/
Сводка с использованием vshadow в качестве внешнего исполняемого файла:
источник
Если кому-то интересно, как запустить исполняемый файл:
.....>. \ file.exe
или
......> full \ path \ to \ file.exe
источник
Мне удалось заставить мою подобную команду работать, используя следующий подход:
Для вашей команды (не то, чтобы это сильно помогло сейчас) все будет выглядеть примерно так:
Ключевые моменты:
Я не пытался добавить часть «computername» в конец командной строки, но, надеюсь, эта информация поможет другим, читающим это, приблизиться к желаемому результату.
источник
Новая escape-строка в PowerShell V3, процитированная из New V3 Language Features :
В Интернете полно командных строк, написанных для Cmd.exe. Эти командные строки работают достаточно часто в PowerShell, но когда они содержат определенные символы, например, точку с запятой (;), знак доллара ($) или фигурные скобки, вы должны внести некоторые изменения, возможно, добавив некоторые кавычки. Это казалось источником многих незначительных головных болей.
Чтобы помочь решить этот сценарий, мы добавили новый способ «избежать» анализа командных строк. Если вы используете магический параметр -%, мы прекращаем обычный синтаксический анализ вашей командной строки и переключаемся на что-то гораздо более простое. Мы не сопоставляем кавычки. Мы не останавливаемся на точке с запятой. Мы не расширяем переменные PowerShell. Мы расширяем переменные среды, если вы используете синтаксис Cmd.exe (например,% TEMP%). Кроме этого, аргументы до конца строки (или канала, если вы передаете по трубопроводу) передаются как есть. Вот пример:
источник
Ты можешь использовать:
Здесь следует отметить, что FilePath должен быть в позиции 0, согласно справочному руководству. Чтобы вызвать справочное руководство по командлету, просто введите
Get-Help <Commandlet-name> -Detailed
. В этом случае это такGet-Help Start-Process -Detailed
.источник
Я попробовал все предложения, но все еще не мог работать
msiexec.exe
с параметрами, которые содержали пробелы. Таким образом, мое решение закончилось использованиемSystem.Diagnostics.ProcessStartInfo
:источник
Это сработало для меня:
Кажется, что ключ заключается в том, что вся команда заключена во внешние кавычки, амперсанд «&» используется для указания того, что выполняется другой дочерний файл команды, а затем, наконец, экранированные (doubled-double-) кавычки вокруг имени пути / файла с пробелами Вы хотели выполнить в первую очередь.
Это также завершение единственного обходного пути к проблеме подключения MS, при котором -File не передает ненулевые коды возврата и -Command является единственной альтернативой. Но до сих пор считалось ограничением -Command то, что он не поддерживает пробелы. Я тоже обновил этот отзыв.
http://connect.microsoft.com/PowerShell/feedback/details/750653/powershell-exe-doesn-t-return-correct-exit-codes-when-using-the-file-option
источник
Альтернативный ответ - использовать кодированный командный ключ Base64 :
После декодирования вы увидите, что это оригинальный фрагмент OP со всеми аргументами и двойными кавычками.
Оригинальная команда:
Это превращается в это, когда закодировано как Base64:
а вот как это сделать дома:
источник
Вы можете запускать exe-файлы в PowerShell различными способами. Например, если вы хотите запустить unrar.exe и извлечь файл .rar, вы можете просто написать в powershell это:
Но иногда это не работает, поэтому вы должны использовать параметр &, как показано выше: Например, при использовании vboxmanage.exe (инструмента для управления виртуальными машинами virtualbox) вы должны вызывать параметры вне строки, например, без кавычек:
Если вы хотите просто вызвать заархивированный файл winrar как файлы .exe, вы также можете разархивировать его с помощью командлета invoke-command и параметра Silent / S (он будет извлечен в той же папке, в которой он был сжат).
Таким образом, существует несколько способов запуска .exe-файлов с аргументами в powershell.
Иногда нужно найти обходной путь, чтобы заставить его работать должным образом, что может потребовать дополнительных усилий и усилий :) в зависимости от того, как .exe был скомпилирован или сделан его создателями.
источник
Я использую этот простой, чистый и эффективный метод.
Я помещаю аргументы в массив, по 1 на строку. Таким образом, его очень легко читать и редактировать. Затем я использую простой прием передачи всех аргументов внутри двойных кавычек в функцию с одним единственным параметром. Это объединяет их, включая массивы, в одну строку, которую я затем выполняю, используя PS «Invoke-Expression». Эта директива специально предназначена для преобразования строки в выполняемую команду. Работает хорошо:
источник
У меня был следующий код отлично работает на моем ноутбуке:
Затем, когда я попытался запустить это непосредственно на одном сервере, я начал получать эти ошибки
"Unrecognized argument ...etc.... All arguments must begin with "-". "
Перепробовав все возможные обходные пути (безуспешно), я обнаружил, что Powershell на сервере (Windows 2008 R2) был версии 3.0, а на моем ноутбуке - 5.0. (вы можете использовать "$ PSVersionTable", чтобы увидеть версию).
После обновления Powershell до последней версии он снова начал работать.
источник
Cmd может справиться с запуском исполняемого файла, но Powershell не может. Я просто собираюсь разобраться с запуском самого exe, так как у меня его нет. Если вам буквально нужно отправить двойные кавычки для аргумента внешней команды, это еще одна проблема, которая была рассмотрена в другом месте.
1) добавьте exe-папку в ваш путь, возможно, в вашем профиле $
2) обратное цитирование пробелов:
источник
Итак, я столкнулся с подобной проблемой и решил решить ее следующим образом:
invoke-expression
для новой строкиПример решения:
источник
Для исполняемого имени можно использовать командлет new-alias , чтобы избежать использования пробелов или необходимости добавлять исполняемый файл в среду $ PATH.
Чтобы перечислить или изменить псевдонимы PS также см.
Из Джеффри Хикс
Другие ответы касаются аргументов.
источник