Вопрос: Создание пакета для запуска Windows PowerShell, после чего запустите некоторый текст


Я новичок в создании пакетных файлов. Я пытаюсь запустить команду, которая откроет Windows PowerShell в определенном каталоге, а затем после этого, чтобы запустить команду.

Пока у меня есть следующее. Powershell.exe -noexit -command "cd 'c:\Dev\ProductDev'" Это, похоже, работает при открытии PowerShell в нужном месте, но я не могу заставить его запустить команду node sp,

Я пробовал следующее без успеха PowerShell -NoExit -Command "Write-Host 'node sp'"

Кроме того, возможно ли открыть Windows PowerShell на синем экране дисплея, а не в окне CMD (черно-белое)?


2
2018-04-24 14:42


Источник


Я не уверен, почему вы просто не напишете сценарий в Powershell? - EBGreen
@EBGreen Объясните? К сожалению, я новичок в написании сценариев вообще. - Austin
Все, что я пытаюсь сделать, это сделать ярлык или два, чтобы выполнить некоторые вещи для меня, но вы хотите видеть их / просматривать на экране PowerShell, а не CMD. - Austin
Если я понимаю, прямо сейчас вы открываете файл в каком-то редакторе (вероятно, в блокноте), и вы печатаете командные команды, вероятно, по одному на строку, а затем сохраняете файл с расширением .bat. Таким образом, создается пакетный файл. Powershell - также язык сценариев (и более универсальный, чем пакетный). Вы бы сделали что-то очень похожее. Откройте файл в редакторе, введите команды powershell и сохраните его как файл .ps1. Есть руководства по всему Интернету для начала работы в Powershell. - EBGreen
@EBGreen ohhh этого не знал. Спасибо! - Austin


Ответы:


Поскольку вы не предоставили свой полный bat-файл, я думаю, что это

Powershell.exe -noexit -command "cd 'c:\Dev\ProductDev'"
PowerShell -NoExit -Command "Write-Host 'node sp'"

Это неправильный подход. Сначала вы запускаете Powershell, который изменяется в данный каталог, а затем остается открытым. Если вы выйдете из этой PowerShell, файл bat начнет второй PowerShell.

Вам нужно запустить один PowerShell и позволить ему выполнять обе команды. Один из способов -

Powershell.exe -noexit -command "cd 'c:\Dev\ProductDev'; Write-Host 'node sp'"

Другой способ - написать файл сценария PowerShell, такой как MyScript.ps1, с этим контентом:

cd 'c:\Dev\ProductDev'
Write-Host 'node sp'

и запустите PowerShell, не давая ему команду выполнить, но сценарий для выполнения (см. также это а также это StackOverflow вопрос). Вы можете запустить эту команду напрямую или поместить ее в файл bat, или даже использовать ее как команду для выполнения в файле lnk:

PowerShell.exe -noexit -ExecutionPolicy Bypass -File "MyScript.ps1"

Проблема с PowerShell заключается в том, что по умолчанию он не запускает сценарии, которые не являются (криптографически) подписанными. Легкий способ решить это -ExecutionPolicy Bypass параметр.


6
2018-04-24 15:02



Я сделаю это! Для второй части, чтобы запустить скрипт powershell, это файл bat? - Austin
Я скорректировал свой ответ, надеюсь, теперь все ясно. Третий блок кода в моем ответе - это содержимое нового файла сценария MyScript.ps1. Четвертый (и последний) кодовый блок - это строка, которую вы можете напрямую ввести в cmd.exe или которую вы можете поместить в файл bat или который вы можете использовать в качестве командной строки в файле lnk. - Werner Henze
ОК, круто! Я сделал, как вы сказали! Я поставил четвертую строчку в летучую мышь, внутри PowerShell.exe -ExecutionPolicy Bypass -File "RunProductDev.ps1", когда я нажимаю на него, он открывает CMD на мгновение, затем закрывается, но мой RunProductDev.ps1 никогда не запускается и не открывается. Они оба просто сидят на моем рабочем столе прямо сейчас, поэтому они находятся в одном каталоге. В ps1 у меня есть cd 'c:\Dev\ProductDev' Write-Host 'node sp' - Austin
Если это имеет значение, node sp команда в основном serve для запуска приложения, поэтому его команда постоянно работает / смотреть, пока я не выйду из нее. - Austin
Для отладки вы можете запустить cmd.exe и запустить test.bat там, поэтому вы видите вывод. Причина, по которой закрывается powershell, заключается в том, что я забыл -noexit, Я обновил свой ответ, чтобы он был включен. - Werner Henze