我如何 Taskkill 不断变化的 PID?
How do I Taskkill a PID that keeps changing?
我正在尝试杀死 NlaSvc 以强制域重新连接而无需重新启动或中断网络。
我可以使用 taskkill /F /IM 8076(或任何数字)执行此操作,但 PID 始终在变化。不幸的是,进程在svchost.exe下,我不想结束这个...
如何在不重新启动、断开适配器等的情况下重新启动 NlaSvc...taskkill 有效,但前提是我提前知道 PID。
有什么想法吗?
更新
感谢您的解决方案!出于某种原因,我需要添加两个 %% 才能使其正常工作。
下面是完整的bat,提升uac,然后运行我需要的。
:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
@echo off
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************
setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp% \OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B
:gotPrivileges
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::
setlocal & pushd .
cmd /c FOR /F "usebackq tokens=2 skip=3" %%i IN (`tasklist /fi "services eq NlaSvc"`) DO taskkill /F /PID %%i&net start NlaSvc
试试这个:
cmd /c FOR /F "usebackq tokens=2 skip=3" %%i IN (tasklist /fi "services eq NlaSvc"
) DO taskkill /PID %%i
我正在尝试杀死 NlaSvc 以强制域重新连接而无需重新启动或中断网络。
我可以使用 taskkill /F /IM 8076(或任何数字)执行此操作,但 PID 始终在变化。不幸的是,进程在svchost.exe下,我不想结束这个...
如何在不重新启动、断开适配器等的情况下重新启动 NlaSvc...taskkill 有效,但前提是我提前知道 PID。
有什么想法吗?
更新 感谢您的解决方案!出于某种原因,我需要添加两个 %% 才能使其正常工作。 下面是完整的bat,提升uac,然后运行我需要的。
:::::::::::::::::::::::::::::::::::::::::
:: Automatically check & get admin rights
:::::::::::::::::::::::::::::::::::::::::
@echo off
CLS
ECHO.
ECHO =============================
ECHO Running Admin shell
ECHO =============================
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)
ECHO.
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation
ECHO **************************************
setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp% \OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B
:gotPrivileges
::::::::::::::::::::::::::::
::START
::::::::::::::::::::::::::::
setlocal & pushd .
cmd /c FOR /F "usebackq tokens=2 skip=3" %%i IN (`tasklist /fi "services eq NlaSvc"`) DO taskkill /F /PID %%i&net start NlaSvc
试试这个:
cmd /c FOR /F "usebackq tokens=2 skip=3" %%i IN (tasklist /fi "services eq NlaSvc"
) DO taskkill /PID %%i