Как запустить PowerShell в CMD
Я пытаюсь запустить скрипт PowerShell внутри командной строки cmd. Кто-то дал мне пример, и это сработало:
powershell.exe -noexit "& 'c:\Data\ScheduledScripts\ShutdownVM.ps1'"
Но проблема в том, что мой скрипт PowerShell имеет входные параметры, поэтому я попытался, но это не работает:
powershell.exe -noexit "& 'D:\Work\SQLExecutor.ps1 -gettedServerName "MY-PC" ' "
Ошибка:
Термин "D:\Work\SQLExecutor.ps1 -gettedServerName" MY-PC "" не распознается как имя командлета, функции,
Как я могу решить эту проблему?
Ответы
Ответ 1
Вам нужно отделить аргументы от пути к файлу:
powershell.exe -noexit "& 'D:\Work\SQLExecutor.ps1 ' -gettedServerName 'MY-PC'"
Другая опция, которая может облегчить синтаксис с помощью параметра File и позиционных параметров:
powershell.exe -noexit -file "D:\Work\SQLExecutor.ps1" "MY-PC"
Ответ 2
Я хотел бы добавить следующее к правильному ответу Шей Леви: Вы можете упростить свою жизнь, если создадите небольшой пакетный скрипт run.cmd
для запуска своего сценария powershell:
@echo off & setlocal
set batchPath=%~dp0
powershell.exe -noexit -file "%batchPath%SQLExecutor.ps1" "MY-PC"
Поместите его в тот же путь, что и SQLExecutor.ps1
и теперь вы можете запустить его, просто дважды щелкнув по run.cmd
.
Замечания:
-
Если вам требуются аргументы командной строки в пакете run.cmd, просто передайте их как %1
... %9
(или используйте %*
для передачи всех параметров) сценарию powershell, т.е.
powershell.exe -noexit -file "%batchPath%SQLExecutor.ps1" %*
-
Переменная batchPath
содержит путь выполнения самого пакетного файла (для этого используется выражение %~dp0
). Таким образом, вы просто помещаете скрипт powershell в тот же путь, что и вызывающий пакетный файл.
Ответ 3
Попробуйте просто:
powershell.exe -noexit D:\Work\SQLExecutor.ps1 -gettedServerName "MY-PC"