JAVA执行 Windows命令 实现远程关机
需求是这样的,用户想通过点击页面上的 指定关闭某一台唤醒类设备(电脑),当然设备肯定不止一台,那么我是这么处理的,请看下文:
(温馨提示: 专业版系统亲测可行,家庭版不行)
1. 更改本地安全策略
更改策略有两种方式:
- 通过操作gpedit.msc 更改
- 通过secedit 命令更改
- 不想一步一步看的可以直接往下翻,有简单办法
第一种方式:
-
首先 win+R 输入gpedit.msc 打开本地组策略编辑器( 提示windows找不到 ‘gpedit.msc’ 的,请装个专业版系统 )
-
然后看到这样的界面
-
依次点击 Windows管理 -> 安全设置 -> 本地策略 -> 用户权限分配 -> 找到从远程系统强制关机策略 看到如下界面
双击打开, 点击添加用户或组,输入Guest 一路确定,这样就OK了. -
然后在另一台电脑上打开CMD
-
输入
net use \\ip /user:username password
输入刚刚设置的电脑的IP地址, 用户名和密码为那台电脑的用户名和密码(一般为Administrator) -
提示你命令成功完成就表示连接成功了,注意:必须建立连接否则接下来可能会提示 ip:拒绝访问。(5)
-
然后输入
shutdown -s -m \\ip地址
默认为1分钟后关机,可以手动设置,可以输入shutdown ?
自行查看
第二种方式 (有捷径 着急的兄弟直接看 第9步骤)
-
我们需要使用
secedit
命令,首先你确保的Windows系统需要是专业版,否则会: -
我们要使用
secedit /configure
就需要一个安全模板,也就是 .inf 文件,那么我们可以使用mmc创建一个模板.
-
依次点击 文件 -> 添加/删除管理单元 -> 找到 安全模板 -> 添加
-
右键安全模板 -> 新加模板
-
像这样
-
依次点击 本地策略 -> 用户权限分配 -> 找到从远程系统强制关机策略 看到如下界面
-
双击打开设置 -> 勾选在模板中定义这些策略 -> 添加Guest
-
点击应用后右键你新建的模板 点击保存 (重要!!!)
-
找到你的模板文件,文件内容是这样的: ( 展示内容是因为可以做成批处理文件执行以上非常复杂繁琐的操作 )
[Unicode]
Unicode=yes
[Version]
signature="$CHICAGO$"
Revision=1
[Privilege Rights]
seremoteshutdownprivilege = Guest,Administrators
- 例如:
@echo off
(echo [Unicode]
echo Unicode=yes
echo [Version]
echo signature="$CHICAGO$"
echo Revision=1
echo [Privilege Rights]
echo seremoteshutdownprivilege = Guest,Administrators)>>sec.inf
secedit /configure /db sec.sdb /cfg sec.inf /log sec.log
echo successed.
pause>nul
该代码原处 https://blog.csdn.net/nui111/article/details/43672767 感谢这位大佬.
- 直接copy代码,新建记事本 粘贴进去保存,修改记事本后缀为 .bat 双击完事儿
- 然后在你电脑上先执行
net use \\ip /user:username password
- 然后执行
shutdown -s -m \\ip
2. 整合进JAVA代码
使用Runtime类,可以执行cmd命令:
Runtime runtime = Runtime.getRuntime();
runtime.exec("net use \\\\" + ip + " /user:" + username + " " + password);
runtime.exec("shutdown -s -m \\\\" + ip);