Подтвердить что ты не робот

Выполнение команды 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 к компьютеру, указанному пользователем в текстовом поле.

4b9b3361

Ответ 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.