Скройте запущенный пакетный скрипт с правами администратора, используя .vbs во втором файле getCmdPID.bat - PullRequest
0 голосов
/ 24 августа 2018

Я хочу скрыть окно консоли admin.bat, когда оно выполняет команды из строки ADMINTASKS.Можно ли дать pid в vbscript или другим способом скрыть консоль?

run.vbs

Set oShell = CreateObject ("Wscript.Shell")
Dim strArgs
strArgs = "cmd /c admin.bat"
oShell.Run strArgs, 0, false

admin.bat

@echo off
title=mycmd
echo test
NET SESSION
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO ADMINTASKS

:ELEVATE
CD /d %~dp0
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', '', '', 'runas', 1);close();"
EXIT

:ADMINTASKS
::(Do whatever you need to do here)
pause
EXIT

getCmdPID.bat

@echo off
for /f "tokens=2 delims=," %%a in (
  'tasklist /v /fo csv ^| findstr /i "mycmd"'
) do (
  set "mypid=%%~a"
)
echo %mypid%
::here should be modifications
start admin.bat
pause

1 Ответ

0 голосов
/ 24 августа 2018

Похоже, у вас есть 2 возможных сценария, которые вы хотите закончить.

Secario 1. У обоих скриптов скрыты от глаз, здесь вы бы запустили run.vbs, который скроет оба скрипта:

run.vbs

Set oShell = CreateObject ("Wscript.Shell")
oShell.Run "D:\getCmdPID.bat", 0, false

admin.bat

@echo off
title=mycmd
echo test
NET SESSION
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO ADMINTASKS

:ELEVATE
CD /d %~dp0
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', '', '', 'runas', 1);close();"
EXIT

:ADMINTASKS
::(Do whatever you need to do here)
pause
EXIT

getCmdPID.bat

@echo off
for /f "tokens=2 delims=," %%a in (
  'tasklist /v /fo csv ^| findstr /i "mycmd"'
) do (
  set "mypid=%%~a"
)
echo %mypid%
::here should be modifications
start admin.bat
pause

Или, в Сценарии 2, вы хотите, чтобы пользователь видел файл getCmDPID.bat, но скрыли admin.bat, но здесь вы бы запустили getCmdPID.bat file, which will call run.vbs and in turn will call admin.bat в скрытом режиме.

run.vbs

Set oShell = CreateObject ("Wscript.Shell")
oShell.Run "D:\admin.bat", 0, false

admin.bat

@echo off
title=mycmd
echo test
NET SESSION
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO ADMINTASKS

:ELEVATE
CD /d %~dp0
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%~nx0', '', '', 'runas', 1);close();"
EXIT

:ADMINTASKS
::(Do whatever you need to do here)
pause
EXIT

getCmdPID.bat

@echo off
for /f "tokens=2 delims=," %%a in (
  'tasklist /v /fo csv ^| findstr /i "mycmd"'
) do (
  set "mypid=%%~a"
)
echo %mypid%
::here should be modifications
"D:\run.vbs"
pause
...