Выполнение команды CMD в PowerShell
У меня возникли проблемы с получением команды PowerShell для запуска. Все, что он делает, это запустить команду, которая будет запущена в окне подсказки CMD.
Вот команда:
"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME
Я пробовал следующее без успеха (я пробовал много итераций этого, чтобы попробовать и получить тот, который работает. Синтаксис, вероятно, все испорчен):
$TEXT = $textbox.Text #$textbox is where the user enters the PC name.
$CMDCOMMAND = "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"
Start-Process '"$CMDCOMMAND" $TEXT'
#iex -Command ('"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"' $TEXT)
Команда просто откроет окно удаленного подключения SCCM к компьютеру, указанному пользователем в текстовом поле.
Ответы
Ответ 1
Попробуйте следующее:
& "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME
В PowerShell строка "..." - это всего лишь строка, и PowerShell оценивает ее, отражая ее на экране. Чтобы заставить PowerShell выполнить команду, имя которой находится в строке, вы используете оператор вызова &
.
Ответ 2
Для запуска или преобразования пакетных файлов из PowerShell (особенно если вы хотите подписать все запланированные сценарии задач с сертификатом) я просто создаю сценарий PowerShell, например, deletefolders.ps1.
Введите в скрипт следующее:
cmd.exe /c "rd /s /q C:\#TEMP\test1"
cmd.exe /c "rd /s /q C:\#TEMP\test2"
cmd.exe /c "rd /s /q C:\#TEMP\test3"
* Каждая команда должна быть добавлена в новую строку, снова вызывающую cmd.exe.
Этот скрипт теперь можно подписать и запустить из PowerShell, выводя команды в командную строку /cmd
напрямую.
Это гораздо безопаснее, чем запуск пакетных файлов!
Ответ 3
Вы должны использовать командлет Invoke-Command для запуска этой внешней программы. Обычно он работает без усилий.
Если вам нужна более одной команды, вы должны использовать командлет Invoke-Expression с -scriptblock
.
Ответ 4
Для тех, кому может понадобиться эта информация:
Я понял, что вы можете в значительной степени выполнить команду, которая в вашем PATH
из сценария PS, и она должна работать.
Иногда вам может потребоваться предварительно запустить эту команду с помощью cmd.exe/c
Примеры
Вызов git из сценария PS
Мне пришлось переупаковать git
клиент, завернутый в Chocolatey
(для тех, кто может не знать, это своего рода магазин приложений для Windows), который в массовом порядке использует сценарии PS.
Я узнал, что, когда git
находится в PATH
, команды вроде
$ca_bundle = git config --get http.sslCAInfo
будет хранить местоположение файла git
crt
в переменной $ca_bundle
.
Поиск приложения
Еще один пример, который представляет собой комбинацию текущего сообщения SO и этого сообщения SO, - это использование команды where
$java_exe = cmd.exe /c where java
будет хранить местоположение файла java.exe
в переменной $java_exe
.
Ответ 5
Одним из решений будет передача вашей команды из PowerShell в CMD. Выполнение следующей команды приведет к notepad.exe
команды notepad.exe
в CMD, которая затем откроет приложение "Блокнот".
PS C:\> "notepad.exe" | cmd
После того, как команда запущена в CMD, вы будете возвращены в приглашение PowerShell и сможете продолжить выполнение сценария PowerShell.