当前位置: 首页 > 知识库问答 >
问题:

登录到远程Windows服务器

佴德曜
2023-03-14

我们可以在远程Windows桌面中使用Java执行. bat文件吗?批处理文件检查系统服务,如果它关闭了,它应该Java本地机器中的程序进行通信,然后它应该再次执行并运行服务,并再次联系Java程序:

我的批处理文件当前只是检查服务是否启动,然后它会启动服务:

所以两个问题:

  1. 我们可以通过我的Java代码远程执行批处理文件吗:
    如果可以的话:
  2. 该代码是否可以与基于特定条件的批处理文件通信(这里我的条件是服务/服务是否正在运行)?:

请查看下面的批处理文件:

@ECHO OFF

for /f "tokens=3" %%a in ('sc query "aspnet_state"^|find "STATE"') do (
if %%a==4 (goto running)
    (sc start aspnet_state goto stopped)
   )
  :stopped
  msg * stopped but now it is running
  goto :eof
:running
msg * running

共有3个答案

周兴朝
2023-03-14

感谢Headstart,但我建议对代码进行一些更改:

   W32ServiceManager serviceManager = new W32ServiceManager("TPADDCM13", null);   
    serviceManager.open(Winsvc.SC_MANAGER_ALL_ACCESS); //here is the change 
    W32Service service = serviceManager.openService("DmServerSppdev02",  
    Winsvc.SC_MANAGER_ALL_ACCESS);  
   if( service.queryStatus().dwCurrentState != Winsvc.SERVICE_RUNNING)//here
   {
       service.startService(); 
       service.close();
       System.out.println("Done");       }

谢谢你的帮助我做到了:)

柯轶
2023-03-14

>

  • 您是否考虑过将BAT文件复制到服务器,并将其设置为每小时运行一次Windows计划任务(不是最好的主意,但这似乎是您的目标)?

    您使用的sc命令本身实际上可以支持与远程计算机的连接,例如sc\\remote。计算机启动(aspnet\u状态)。这可以在任何机器上设置和运行,前提是执行命令的用户有权在远程计算机上启动服务(您无论如何都需要这样做)。

    只要您在Windows机器上运行这个,就可以使用JNA进行本机API调用。请参见下面的示例

    示例:

    W32ServiceManager manager = new W32ServiceManager("REMOTE.COMPUTER", null);
    manager.open(SC_MANAGER_CONNECT);
    
    W32Service aspNetService = manager.openService(
         "aspnet_state", 
         SERVICE_QUERY_STATUS | SERVICE_START
    );
    
    if (aspNetService.queryStats().dwCurrentState != SERVICE_RUNNING) {
        aspNetServices.startService();
    }
    
    aspNetService.close();
    

    编辑

    关于您的第一条评论:由于涉及API,提供登录到远程服务器的凭据要复杂得多。通常,我建议您确保您的进程以您希望远程登录的用户的身份运行。或者,waffle项目有代码在NTLM身份验证的上下文中使用JNA模拟用户。这可以扩展到你的情况。Windows API中的关键函数是LogonUser和`ImpersonateLoggedOnUser,这两个函数都已映射到提供的JNA Advapi32包装中。要点如下:

    Advapi32.INSTANCE.LogonUser(username, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, handle);
    Advapi32.INSTANCE.ImpersonateLoggedOnUser(handle);
    // do something as user here...
    Advapi32.INSTANCE.RevertToSelf(); // drop the impersonated token
    

    您可能需要调用DuplicateTokenEx才能成功完成服务调用。有关模拟的详细信息,请参阅链接的Microsoft文档。这在Javadocs for Advapi32(也在上面链接)中是重复的,但是该文档并没有将您链接到各种函数之间。

  • 秦涵涤
    2023-03-14

    关于如何执行任务,您有自己的想法吗。远程windows计算机上的bat文件?您是否考虑过将批处理文件传递到远程windows计算机?是否考虑获得运行这样的脚本所需的管理权限?在来回通信过程中考虑了防火墙问题?

    你似乎正在设计的东西看起来类似于特洛伊木马恶意软件。它们的工作方式-它们感染目标机器(交付阶段),然后代理将不时与服务器机器通信(通信阶段),以查看服务器机器是否需要代理来执行任何工作。这是最可靠的,因为出站连接通常是允许的,而入站(服务器连接到代理)几乎总是被禁止的。收到命令日志后,代理将执行命令(exec阶段),然后将结果发布回服务器(通信返回阶段)。

    像这样的。

    注:Java不是首字母缩略词。

     类似资料:
    • 问题内容: 我正在尝试使用Java远程登录到Jenkins服务器。 我没有找到有关如何安全完成操作的文档。 对于使用url的本地服务器:http:// user:pass @ server无效。 有人可以推荐我一些有关此主题的文档吗? 问题答案: 詹金斯Wiki的文献资料 应该与您的基本身份验证类型一起使用。 具有httpclient 4.3.x的Java示例

    • 我正在ip的服务器上使用以下命令连接到上承载的数据库 错误1045(28000):拒绝用户“user”@“y.y.y.y”的访问(使用密码:YES)

    • 本文向大家介绍python pexpect ssh 远程登录服务器的方法,包括了python pexpect ssh 远程登录服务器的方法的使用技巧和注意事项,需要的朋友参考一下 使用了python中的pexpect模块,在测试代码之前,可输入python进入交互界面,输入help('pexpect'),查询是否本地含有pexpect模块。 如果没有,linux系统输入 easy_install

    • 本文向大家介绍Django 登录到Syslog服务,包括了Django 登录到Syslog服务的使用技巧和注意事项,需要的朋友参考一下 示例 可以将Django配置为将日志输出到本地或远程syslog服务。此配置使用python内置的SysLogHandler。            

    • 我正在尝试使用PHPMyAdmin登录MySQL服务器,但它不起作用, 我插入了true和,但它仍然不起作用,我不知道原因是什么 错误: mysql_real_connect():(HY000/1045):配置中定义的控制用户“root”@“localhost”(使用密码“是”)连接的访问被拒绝失败 无法进入PHPMyAdmin

    • 前面介绍了如何安装 Linux 终端工具,本小节介绍本地电脑如何使用 ssh 命令远程登录、Linux 终端工具远程登录的方式,这两种登录方式都是基于 ssh 网络安全协议的,学会使用远程登录 Linux 服务器,会让你对 Linux 系统更加熟悉。 1. SSH Secure Shell 的缩写即为 SSH ,此网络安全协议是由 IETF 的网络小组(Network Working Group)