我想在远程计算机上运行一些命令。当我尝试使用以下命令中提到的psexec.exe
和-h
参数运行某些命令时,我在我的应用程序中使用-s
。
C:\psexec.exe -accepteula \\IPAddress -h -u "Username" -p pwd -s netstat -bno
当我们提供有效的用户名和密码时,它使用提供的凭据,但是当我们提供无效的用户名和密码时,它会选择-s
并且我已经对 -s <进行了一些研究/ strong>它说 -s =在系统帐户中运行远程进程。
-s
命令在使用-h
和-s
等参数在特定远程计算机上运行上述命令时,用户名和密码优先于{-s
{1}}?
答案 0 :(得分:1)
使用-s
,您的命令将使用系统帐户执行。 系统帐户是用于运行核心Windows服务的特殊Windows帐户(更多信息here和here);此帐户还具有特殊权限,例如访问拒绝所有其他帐户的注册表项。
正如您可以在链接的文档中看到的那样:
此帐户没有密码
因此,在使用系统帐户时,您无需指定密码。
这就是PsExec的工作原理:
-s
参数时,该命令将使用系统帐户执行,因此会忽略-u
和-p
参数。 -h
(但不是-s
),则帐户和密码(-u
和-p
)用于连接并执行帐户&#的流程39;提升的令牌(如果可用),所以它们必须是正确的。-h
与-s
一起指定,则帐户和密码(-u
和-p
)将不会用于连接,因为该命令将与系统帐户无论如何。您可以仔细检查此行为,在远程服务器上启动程序并查看远程计算机的任务管理器:您将看到,使用-s
,程序将在系统<下运行/ strong>帐户,否则将在-u
指定的用户下运行。
例如,如果使用此命令运行记事本:
psexec \\remote_server -u domain\user -p correct_password -d -i -s cmd /c notepad.exe
或使用此命令:
psexec \\remote_server -u domain\user -p correct_password -d -i -s -h cmd /c notepad.exe
或使用此命令:
psexec \\remote_server -u domain\user -p wrong_password -d -i -s -h cmd /c notepad.exe
在所有这三种情况下,记事本在系统帐户下执行: