У меня много проблем с запуском команды 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 к компьютеру, указанному пользователем в текстовом поле.
powershell
command-line
cmd
пользователь3585839
источник
источник
Ответы:
Попробуй это:
& "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME
Для PowerShell строка «...» - это просто строка, и PowerShell оценивает ее, отображая ее на экране. Чтобы заставить PowerShell выполнить команду, имя которой указано в строке, вы используете оператор вызова
&
.источник
ipconfig.exe
без использования&
. Единственный раз, когда вам нужно использовать,&
- это вызвать имя команды в строковой форме. И вы должны использовать «строковую форму», когда в пути или имени файла есть пробел.&
, потому что PowerShell будет думать, что вся строка является именем исполняемого файла. Вместо этого укажите только имя исполняемого файла и затем укажите параметры исполняемого файла.&
иcmd
?&
- это оператор вызова (или вызова) PowerShell. Это позволяет вам выполнять команду, когда у вас есть строка, содержащая либо имя команды, либо путь к exe. Вы также можете указать блок сценария, например,&{$foo=42}
или объект CommandIno, например$cmd = Get-Command Get-Date; &$cmd
.cmd
это другая оболочка. Обратите внимание, что&
выполняется в дочерней области, поэтому вы заметите, что после завершения установленного$foo
выше блока сценария он$foo
больше не устанавливается.Чтобы запускать или преобразовывать командные файлы извне из 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
напрямую в командную строку .Это намного безопаснее, чем запуск командных файлов!
источник
sc query serviceName
из PowerShell думал, что он выполнится, но без вывода. Я пробовал несколько итераций техники &, без кубиков. Но запускать его так, как вы рекомендовали, сработало. Затем я нажимаю cmd.exe /? чтобы увидеть, какие еще чудеса меня ожидали. Мне нравится запускать cmd только при необходимости.Одним из решений было бы трубы ваша команда из PowerShell для CMD. Выполнение следующей команды направит
notepad.exe
команду в CMD, который затем откроет приложение «Блокнот».PS C:\> "notepad.exe" | cmd
После выполнения команды в CMD вы вернетесь в командную строку PowerShell и сможете продолжить выполнение сценария PowerShell.
Правки
Отображается стартовое сообщение CMD
Как указывает mklement0 , этот метод показывает стартовое сообщение CMD. Если вы должны были скопировать вывод, используя описанный выше метод, в другой терминал, сообщение о запуске будет скопировано вместе с ним.
источник
&
нет. Например& "mklink"
, у меня не"mklink" | cmd
работал, пока работалДля тех, кому может понадобиться эта информация:
Я понял, что вы можете в значительной степени запустить команду
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
переменной.источник
cmd /c
вызвать его внутренние команды, такие какmklink
. Напротив,where.exe
это внешняя программа, поэтому вы можете вызывать ее напрямую. Однако из-за конфликта имени со встроеннымwhere
псевдонимом PowerShell (forWhere-Object
) вы должны использоватьwhere.exe
; например,where.exe java
.Get-Command
вместо вызоваcmd
? То же, что и раньше:$java_exe = $(Get-Command java.exe).Source
Для запуска этой внешней программы необходимо использовать командлет Invoke-Command. Обычно работает без усилий.
Если вам нужно более одной команды, вы должны использовать командлет Invoke-Expression с
-scriptblock
опцией.источник