开心一笑: 会买水果的狗狗

    关注微信公众号

    QQ群:831045818

    app下载

    当前位置:首页> 运维 > 技术文档 > 正文
    PSEXEC 在远程计算机上运行命令
    发布时间:2023-08-29 14:47:02.0 浏览次数:

    1.rar

    PSTools.zip

    https://learn.microsoft.com/zh-cn/sysinternals/downloads/psexec

    PsExec - Sysinternals | Microsoft Learn

    高级工具

    https://www.poweradmin.com/paexec/

    PsExec 是一个有用的系统管理员工具,允许您在远程计算机上执行命令和运行程序。 PsExec 的杀手级功能是它允许管理员与远程计算机建立交互式会话,并使用它远程运行程序,并执行任何命令(在后台或以交互模式)。 PsExec 仅提供控制台的命令行界面,可用作轻量级的 telnet 替代品。


    使用 PsExec 的先决条件

    PsExec 必须满足以下要求才能连接到远程计算机:

    1、远程计算机必须打开 TCP/445 (SMB) 和 UDP/137 (NETBIOS) 端口,并且应在 Windows Defender 防火墙中启用文件和打印机共享例外。建议仅为专用网络和域网络配置文件打开这些端口,以降低安全风险。

    您可以在 Windows Defender 防火墙设置 (GUI) 中或使用以下命令在远程计算机上允许文件和打印机共享功能:

    Set-NetFirewallRule -DisplayGroup “File And Printer Sharing” -Enabled True -Profile Private

    2、您的帐户必须具有目标远程计算机上的本地管理权限;

    3、LanmanServer 和 LanmanWorkstation 服务必须在远程主机上运行:get-service LanmanServer , LanmanWorkstation

    4、必须在远程计算机上启用默认的 admin$ 共享;确保 ADMIN%(远程管理)和其他 Windows 管理共享(C$、IPC$)已在远程计算机上发布,检查命令

    net view \DESKTOP-U97VIM5/all

    确保 ADMIN%(远程管理)和其他 Windows 管理共享(C$、IPC$)已在远程计算机上发布,如果远程计算机上的管理员共享列表为空,请在远程计算机上运行以下命令来发布默认管理员共享:

    reg add HKLMSYSTEMCurrentControlSetServiceslanmanserverparameters /f /v AutoShareWks /t REG_DWORD /d 0

    然后重新启动远程计算机。

    您还必须禁用远程 UAC,这会阻止工作组计算机上管理员帐户的远程访问:

    reg add "HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem" /v "LocalAccountTokenFilterPolicy" /t REG_DWORD /d 1 /f


    如果您尚未指定用户名和密码,PsExec 进程将使用您当前的凭据在远程计算机上启动。从版本 2.1 开始,PsExec 在通过网络传输时对用户凭据进行加密(在以前的版本中,密码以明文形式发送)。

    首次运行 PsExec 时,您必须接受 Sysinternals 许可协议;为了防止显示图形许可协议提示,您可以在第一次运行 PsExec 时添加 /accepteula 开关。

    psexec /accepteula

    例:在以下示例中,我们将使用 PSExec 刷新远程计算机 lon-srv01 上的 DNS 缓存:

    psexec \lon-srv01 ipconfig /flushdns

    如果程序的路径中有空格,则必须将其用双引号引起来:

    psexec \lon-srv01 "c:\Program Files (x86)app1app.exe"


    PsExec 如何工作?

    PsExec 将 psexesvc.exe 文件复制到远程计算机的隐藏管理文件夹 Admin$ (C:WindowsSystem32psexesvc.exe);

    然后它通过 Windows 服务控制管理器 API 启动远程计算机上的 PSEXESVC 服务;

    您的本地 PsExec 进程使用命名管道连接到远程 PSEXESVC 服务,将您的命令发送到远程计算机,并等待结果;

    该命令的文本输出将发送到您的计算机,并且错误代码将显示在您的控制台中。如果命令成功,您将看到退出代码 0。

    任务完成后,PsExec 会停止服务并自动将其从远程计算机中删除。

    暗示。如果按 Ctrl-C 键结束远程 PsExec 会话,PSEXESVC 服务不会自动删除。您可以使用以下命令手动删除此服务:

    sc.exe \lon-srv01 delete psexesvc

    当您在远程用户下通过 PsExec 以交互方式运行 cmd.exe 时,在启用 UAC 时,您无法提升权限(作为管理员)。要使用帐户的提升令牌运行命令,请使用 –h 选项。此选项导致 PsExec 会话中的所有命令以“以管理员身份运行”模式运行。


    PsExec 用法示例

    让我们看一些使用 PsExec 在远程计算机上执行命令的有用示例。

    要重新启动远程计算机,请运行以下命令:

    psexec \lon-srv01 "cmd.exe" "/c shutdown /f /r/ /t 60"

    如果需要一一运行多个命令,最好在远程计算机上以交互模式运行 PsExec。为此,请运行命令:

    psexec \lon-srv01 cmd


    在WinRM下使用psexec在远程计算机上运行计划任务

    psexec \\RemoteMachineName -u user_name -p password schtasks /Create /SC DAILY /TN "My Task" /TR "C:\Actions\backup.bat" /ST 09:00

    将本地文件夹同步到远程计算机

    xcopy \\local-machine\c$\backup \\remote-machine\c$\backup /s /e

    psexec和PowerShell结合执行命令(例如重启远程机器)

    psexec.exe \\remote-machine powershell.exe -Command "Restart-Computer -Force"

    这将打开一个交互式命令提示符。您在控制台中键入的所有命令都将在远程 lon-srv01 计算机上执行。

    要停止交互式 PsExec 会话,请运行以下命令:Exit

    添加 -nobanner 选项以隐藏每次运行 psexec 时出现的版权消息:

    要使用特定帐户连接到远程计算机并运行交互式 shell,请使用以下命令:

    psexec.exe \lon-srv01 -u user -p password cmd.exe

    您甚至可以使用 PsExec 远程运行 PowerShell 命令。例如,以下命令将返回远程计算机上 C:PS 目录的大小:

    psexec \lon-srv01 powershell -ExecutionPolicy RemoteSigned -command "'{0:N2}' -f ((gci C:PS | measure Length -Sum).Sum/1MB)"

    -c 参数允许您指定要复制并在远程计算机上运行的本地文件的名称。例如:

    psexec \lon-srv01 -c c:psmyapp.exe

    您可以使用 PsExec 作为远程安装软件的最简单方法。例如,您有某个程序的安装程序文件(例如 setup.msi)。要将 msi 文件复制到远程计算机并安装它,请使用以下一行:

    psexec.exe \lon-srv01 -c setup.msi –i –s "msiexec.exe /i setup.msi"

    默认情况下,PsExec 不允许在远程用户的桌面上启动 GUI 程序。 PsExec 以隐藏模式执行命令(您在执行命令的远程计算机上看不到任何窗口或对话框)。但是,您可以使用 -i 选项更改此设置。

    例如,以下 PsExec 命令将打开远程计算机上的 notepad.exe 进程并将其显示在用户桌面上:

    psexec -i \lon-srv01 notepad

    然后,PsExec 将等待远程计算机上完成此过程。

    PsExec 将等待远程计算机上运行的进程完成。如果远程用户不关闭桌面上的记事本窗口,您的 PsExec 进程将无限期地等待它完成。您可以使用 -d 开关来阻止 PsExec 等待远程进程完成:

    psexec -i -d \lon-srv01 notepad


    使用 PsExec 以本地系统帐户运行命令

    PsExec 有一个有趣且有用的功能。您可以使用 -s 开关在 SYSTEM 帐户下运行本地计算机上的任何命令或程序。例如,运行 CLI 会话:

    psexec -s cmd

    使用 whoami 命令检查您当前登录的用户。如您所见,控制台是从 NTAuthoritySystem 帐户启动的。

    如何使用 PsExec 在多台远程计算机上运行命令

    PsExec 允许您同时在多台远程计算机上运行该命令。为此,您可以设置以逗号分隔的计算机名称:

    psexec \PC1,PC2,PC3,PC33 “ipconfig /all”

    或者将计算机列表保存到文本文件(每行一个主机名),然后指定该文件的路径:

    psexec @c:pscomputer_list.txt ipconfig

    如果您输入星号 (psexec \*) 而不是计算机名称,则该命令将在域中的所有计算机上执行(您只能在加入域的计算机上使用此技巧)。

    例如,以下命令会将 run.bat 文件复制到文本文件 c:pscomputer_list.txt 中列出的所有计算机,并执行此批处理(-h 参数用于运行提升的批处理):

    PsExec.exe @c:pscomputer_list.txt -h -u .administrator -p $upper0P@$ -c "c:psrun.bat"


    常见 PsExec 错误

    PsExec 访问被拒绝错误

    在某些情况下,尝试使用 PsExec 连接远程计算机时可能会出现以下错误:

    无法访问计算机名

    找不到网络路径

    确保在 computername 上启用默认的 admin% 共享。

    确保可以通过 SMB(TCP 端口 445)通过网络访问远程计算机。您可以使用以下 Test-NetConnection PowerShell 命令测试与远程计算机的连接:

    Test-NetConnection -ComputerName pc99 -Port 445

    检查命令响应。如果 TcpTestSucceeded 不等于 True,则表示该端口被防火墙阻止。

    如果您的帐户没有远程 Windows 主机的本地管理员权限,则会出现错误:

    1、无法安装/启动 PSEXESVC 服务:

    2、拒绝访问

    3、PsExec:登录失败

    4、连接到远程计算机时,可能会出现以下 PsExec 错误:

    4、PsExec 无法在 PCName 上启动 cmd.exe:

    5、登录失败:尚未授予用户在此计算机上请求的登录类型。

    在这种情况下,您需要将以下选项添加到 PsExec 命令中:PsExec.exe -i –h PCName yourcommand


    PSExec 错误代码 1

    如果当您在远程计算机上运行批处理文件时 PsExec 返回“错误代码 1”,则您很可能在 bat 文件中使用了 exit 命令。将退出命令更改为

    exit / b 0

    此类命令将终止批处理文件、关闭 cmd.exe 并将返回代码设置为零。




    -nobanner 选项以隐藏每次运行 psexec 时出现的版权消息

    psexec -s cmd  -s开关在 SYSTEM 帐户下运行本地计算机上的任何命令或程序

    psexec -i -d \lon-srv01 notepad  -i是显示窗口 -d 开关来阻止 PsExec 等待远程进程完成;打开程序后结束psexec操作,而不是等待程序结束,才退出

    -c 参数允许您指定要复制并在远程计算机上运行的本地文件的名称


    完整

    psexec  -nobanner -accepteula  -h -i 1 -s -d \\ip -u admin -p -pass cale.exe

    nobanner 不显示版权信息

    accepteula  第一次用同意协议

    h 提升运行权限

    -i 需要用query user查用户ID 来显示ui窗口

    -s 高级用户打开 没有则受限用户模式

    -d psexe执行不会挂起


    执行

    psexec  -nobanner -accepteula  -h -i 1 -s  -d \\ip -u admin -p -pass  -f -c c:\a.bat


    -f 每次执行都复制一次

    -c 后面是本地路径,复制到远程系统并执行


    java 执行拿不到日志 只能把日志放到远程再读取


    cmd 执行 xxx.bat c:\1.txt


    xxx.bat内容 

    ipconfig /all  >%1.

    关注"都市百货" 了解南陵

    微信咨询wanglf2r(不拉群 发广告者勿加)

    0
    0
    上一篇:jpa REGEXP正则使用方式 上一篇:springboot跳转

    热门评论

    南陵新闻
    公示公告
    常用查询
    风光南陵
    走出南陵
    友情链接