Как встроить сценарий PowerShell в тот же файл, что и пакетный сценарий Windows?
Я знаю, что такие вещи возможны в других сценариях:
- Встраивание SQL в пакетный скрипт с использованием
sqlcmd
и хитрой компоновки goto и комментариев в начале файла - В среде * nix с именем программы, с которой вы хотите запустить сценарий в первой строке закомментированного сценария, например,
#!/usr/local/bin/python
.
Возможно, не существует способа сделать это - в этом случае мне придется вызывать отдельный сценарий PowerShell из запускающего сценария.
Одним из возможных решений, которое я рассмотрел, является вывод сценария PowerShell, а затем его запуск. Хорошая причина не делать этого заключается в том, что одна из причин, по которой это делается, заключается в использовании преимуществ среды PowerShell без необходимости, например, экранирования символов.
У меня есть некоторые необычные ограничения, и я хотел бы найти элегантное решение. Я подозреваю, что этот вопрос может вызывать различные ответы: "Почему бы вам не попытаться решить эту другую проблему?" Достаточно сказать, что это мои ограничения, извините за это.
Есть идеи? Есть ли подходящая комбинация умных комментариев и escape-символов, которые позволят мне добиться этого?
Несколько мыслей о том, как этого добиться:
- Карат
^
в конце строки является продолжением - как подчеркивание в Visual Basic - Амперсанд
&
обычно используется для разделения команд.echo Hello & echo World
приводит к двум выводам в отдельных строках. - % 0 даст вам скрипт, который в данный момент выполняется
Так что что-то вроде этого (если бы я мог заставить это работать) было бы хорошо:
# & call powershell -psconsolefile %0
# & goto :EOF
/* From here on in we're running nice juicy powershell code */
Write-Output "Hello World"
Кроме...
- Это не работает... потому что
- Расширение файла не соответствует PowerShell:
Windows PowerShell console file "insideout.bat" extension is not psc1. Windows PowerShell console file extension must be psc1.
Windows PowerShell console file "insideout.bat" extension is not psc1. Windows PowerShell console file extension must be psc1.
- CMD на самом деле не совсем доволен этой ситуацией - хотя она и натыкается на
'#', it is not recognized as an internal or external command, operable program or batch file.