Хорошо, признаю, что предложенный приём позволяет определить именно в консоли или нет выполняется скрипт, а не спомощью какого хоста.
Но с прикладной точки зрения важнее узнать именно первое, поэтому приём не теряет свою значимость.
Для чего надо узнать, с помощью какого хоста (WScript.exe/CScript.exe, возможно, переименованного) выполняется скрипт? Для того лишь, чтобы узнать, как себя будет вести WScript.Echo()? Но, если заведомо требуется диалоговое окно, можно использовать
MsgBox() или WshShell.Popup(),
а если нужен вывод в StdOut, то
WScript.StdOut.WriteLine() или
CreateObject("Scripting.FileSystemObject").GetStandardStream(1).WriteLine()
— да, StdOut доступен и в WScript.exe, если его вывод перенаправляется/перехватывается (невозможно только перенаправление в CON):
wscript.exe script.js > log.txt
wscript.exe script.vbs | more
for /f %i in ('wscript.exe script.wsf') do echo %i
MsgBox WshShell.Exec("wscript.exe script.vbs").StdOut.ReadAll()
А вот от того, в консоли или нет выполняется скрипт, зависит управление из него консольных приложений с помощью WshShell.Exec():
если да, то значит так и было задумано и WshShell.Exec() не будет создавать новых окон;
если же нет, то WshShell.Exec() будет запускать каждое консольное приложение в новом окне (именно так себя ведет себя скрипт в примере alexii, выполняющийся с помощью CScript.exe без собственного консольного окна и с перехватом его вывода VbsEdit)
и, чтобы этого не происходило, можно, чтобы скрипт перезапускал сам себя под управлением консольного хоста в скрытом окне.
И тут встаёт обратная задача — получить путь к консольномо хосту сценариев: стоит ли предполагать, что это CScript.exe, находящийся в одном из каталогов, перечисленных в %Path% или возможно лучшее решение?
Я нашёл только запись в реестре:
C:\>reg query "HKLM\SOFTWARE\Microsoft\Windows Scripting Host\Locations"
! REG.EXE VERSION 3.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Scripting Host\Locations
CScript REG_EXPAND_SZ %SystemRoot%\System32\cscript.exe
WScript REG_EXPAND_SZ %SystemRoot%\System32\wscript.exe
— Испольуется ли этот раздел для чего нибудь или это только атавизм, присутствует ли он в 64-разрядных системах?