运行以下命令
set USERDOMAIN
set USERNAME
在 Windows 服务中将返回
USERDOMAIN=MY_CORPORATE_DOMAIN
USERNAME=SYSTEM
但是我的服务在“NT AUTHORITY\SYSTEM”中运行。
我的问题是:
为什么
USERDOMAIN
是“MY_CORPORATE_DOMAIN”而不是“NT AUTHORITY”?如果我想
taskkill
按如下所示运行以终止当前用户下的进程。- 它无法在 SYSTEM 用户中正确运行,因为用户域返回 MY_CORPORATE_DOMAIN,而它应该返回 NT AUTHORITY。
我该如何重写该命令?
taskkill /F /FI "USERNAME eq %userdomain%\%username%" /IM my_process.exe
答案1
在域中,SYSTEM
用户在某些情况下会使用 Active Directory 计算机帐户的凭据,这就是其中一种情况。计算机也有帐户;它们的 SAM 名称只是计算机名称$
末尾带有一个附加项。因此,域中命名的CATACLYSM
计算机INFERNO
将INFERNO\CATACLYSM$
响应echo %userdomain%\%username%
。
如果您想要获取NT AUTHORITY\SYSTEM
以 运行的程序SYSTEM
,请使用whoami
实用程序。遗憾的是,Windows 批处理中没有一种好的方法可以将命令的输出放入变量中。Stack Overflow 上的这个答案建议你做这样的事情:
whoami > tmp-whoami
set /p currentuser= < tmp-whoami
del tmp-whoami
然后您就可以使用%currentuser%
代替%userdomain%\%username%
。