中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 02:22
中国DOS联盟论坛 » 其它操作系统综合讨论区 » 紧急求救,达人们请进!万分感激!
楼 主 紧急求救,达人们请进!万分感激! 发表于 2006-11-29 14:02 ·  中国 广东 深圳 电信
初级用户
积分 52
发帖 22
注册 2006-11-17 22:26
UID 70841
性别 男
状态 离线
我手中有几百台WINDOWS服务器,现在需要每个月根据上面的安排重启一次。每台依次重启非常麻烦,想请教各位用什么方法,来下发命令或者重启比较便捷,谢谢!万分感激! 基本需要是能够根据上面下达的时间灵活批量重启所有机器,并且部署起来不需要花太多的时间。谢谢! 有好的方法能提高效率的达人最好加我QQ:9314651 ,再次感谢!
2 发表于 2006-11-30 01:52 ·  中国 江苏 南京 电信
高级用户
★★
积分 623
发帖 214
注册 2006-09-22 20:48
UID 63387
状态 离线
请问一下你的几百台服务器的ip是怎样的,
远程重启用shutdown
条件为必须为每台机子赋予可以远程重启的权利,在需要远程重启的每台机子上执行下面的操作,
1、单击“开始”按钮,选择“运行”,在对话框中输入“gpedit.msc”,然后单击“确定”,打开“组策略编辑器”。
  2、在“组策略”窗口的左窗格中打开“计算机配置”—“Windows 设置”—“安全设置”—“本地策略”—“用户权利指派”。(如图)

  3、在“组策略”窗口的右窗格中选择“Force shutdown from a remote system
(从远端系统强制关机)”,双击。
 4、在弹出的对话框中显示目前只有“Administrators”组的成员才有权从远程关机;单击对话框下方的“添加用户或组”按钮,然后在新弹出的对话框中输入“guest”,再单击“确定”。
  5、这时在“从远端系统强制关机”的属性中便添加了一个“guest”用户,单击“确定”即可。
  6、关闭“组策略”窗中。
重启命令为:shutdown -r \\ip /f
时间灵活:用at定时重启.
批量重启所有机器:用for
@echo off
set /p a=请输入要重启的时间:
for /l in %%i (2,1,255) do @(
at %a% shutdown -r \\192.168.0.%%j -f
)
echo ===完成===
pause
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
redtek +5 2006-11-30 08:25
lxmxn +3 2006-12-02 03:55
3 发表于 2006-11-30 04:32 ·  中国 广东 深圳 电信
初级用户
积分 52
发帖 22
注册 2006-11-17 22:26
UID 70841
性别 男
状态 离线
非常感谢tianzizhi的解答。我的IP是内网的,比如说172.19.64.25,172.19.60.35……
我有几个疑问:一、可否使用读取IP列表的方式呢,如读取IP.txt。二、改成GUEST可以强制关机以后会带来很多安全问题。我所有的机器的用户名和密码是一致的,是否可以通过类似Linux登陆,只询问一次输入用户名和密码的方式来连接重启呢(因为用户名和密码所有机器一致)? 三、或者最简单的方式,一、二合并成一个IP.txt,通过三个字段IP User Passwd 来读取呢?如:172.19.64.25 admin system
4 发表于 2006-11-30 06:37 ·  中国 江苏 南京 电信
高级用户
★★
积分 623
发帖 214
注册 2006-09-22 20:48
UID 63387
状态 离线
如果不修改组策略,进行连接的话可以用telnet或ipc连接,telnet自动的话有点困难,那就用ipc$来连接.
ip.txt的内容你自己做,内容形式为:
ip passwd user
(注意,密码在中间)
中间用空格格开.
@echo off
set /p a=请输入要重启的时间:
for /f "tokens=1,2,3" %%i in (ip.txt) do @(
net use \\%%i\ipc$ "%%j" \user:"%%k"
start /wait at %a% shutdown -r -t 0 /f
)
echo ===完成===
pause

具体你再改,我也没法测验,有问题你再问.
5 发表于 2006-12-01 04:25 ·  中国 广东 深圳 电信
初级用户
积分 52
发帖 22
注册 2006-11-17 22:26
UID 70841
性别 男
状态 离线
非常感谢,我已经初步有个想法了,正在测试中……
6 发表于 2006-12-01 06:14 ·  中国 江苏 南京 电信
高级用户
★★
积分 623
发帖 214
注册 2006-09-22 20:48
UID 63387
状态 离线
测试成功后,请把内容贴上来看看!
7 发表于 2006-12-01 06:59 ·  中国 广东 深圳 电信
初级用户
积分 52
发帖 22
注册 2006-11-17 22:26
UID 70841
性别 男
状态 离线
好的,没有问题,大致思路是你那样,代码略微修改了一些。
8 发表于 2006-12-01 23:11 ·  中国 广东 深圳 电信
初级用户
积分 52
发帖 22
注册 2006-11-17 22:26
UID 70841
性别 男
状态 离线
@echo off
set /p a=请输入要重启的时间:
for /f "tokens=1,2,3" %%i in (ip.txt) do @(
net use \\%%i\ipc$ "%%j" /user:"%%k"
at \\%%i %a% shutdown /r /t 30 /f
)
echo ===完成===
pause

测试通过

但是有几个问题:
1.这个没有日志,最好加上日志,把net use 不成功的在屏幕上显示出来并发送到error.txt,把成功的IP发送到success.txt
2.start /wait
这个参数很重要吗?我觉得不是很必要啊?
3.我用
at \\%%i %a% shutdown /r /t 30 /f
测试OK,但是
at %a% shutdown /m \\%%i /r /t 30 /f
就不行,我登陆上执行重启的机器里用at命令查看,任务是在里面的,但是到了时间不执行,为什么呢?
9 发表于 2006-12-01 23:59 ·  中国 江苏 南京 电信
高级用户
★★
积分 623
发帖 214
注册 2006-09-22 20:48
UID 63387
状态 离线
1.加日志
@echo off
set /p a=请输入要重启的时间:
for /f "tokens=1,2,3" %%i in (ip.txt) do @(
net use \\%%i\ipc$ "%%j" /user:"%%k" || goto end
at \\%%i %a% shutdown /r /t 30 /f
echo %%i>>success.txt
:end
net use \\%%i\ipc$ "%%j" /user:"%%k" 2>>error.txt & echo %i>>error.txt
)
echo ===完成===
pause
不知行不行,你试一下.
2.start wait我是随便加上去的,去掉没关系.
3.at %a% shutdown /m \\%%i /r /t 30 /f
语法错误, 也没/m这个选项的,目标机应在at后面.

AT 命令安排在特定日期和时间运行命令和程序。
要使用 AT 命令,计划服务必须已在运行中。

AT | /DELETE ]
AT time
| /NEXT:date] "command"

\\computername 指定远程计算机。如果省略这个参数,
会计划在本地计算机上运行命令。
id 指定给已计划命令的识别号。
/delete 删除某个已计划的命令。如果省略 id,
计算机上所有已计划的命令都会被删除。
/yes 不需要进一步确认时,跟删除所有作业
的命令一起使用。
time 指定运行命令的时间。
/interactive 允许作业在运行时,与当时登录的用户
桌面进行交互。
/every:date 每个月或每个星期在指定的日期运行命
令。如果省略日期,则默认为在每月的
本日运行。
/next:date 指定在下一个指定日期(如,下周四)运
行命令。如果省略日期,则默认为在每
月的本日运行。
"command" 准备运行的 Windows NT 命令或批处理
程序。

[ Last edited by tianzizhi on 2006-12-2 at 12:10 AM ]
10 发表于 2006-12-02 06:48 ·  中国 江苏 南京 电信
高级用户
★★
积分 623
发帖 214
注册 2006-09-22 20:48
UID 63387
状态 离线
把日志的弄好了如下:
@echo off
set /p a=请输入要重启的时间:
for /f "tokens=1,2,3" %%i in (ip.txt) do @(
net use \\%%i\ipc$ "%%j" /user:"%%k" && at \\%%i %a% shutdown /r /t 30 /f && echo %%i>>success.txt
net use \\%%i\ipc$ "%%j" /user:"%%k" 2>>error.txt || echo %%i>>error.txt

)
echo ===完成===
pause

[ Last edited by tianzizhi on 2006-12-2 at 06:56 AM ]
11 发表于 2006-12-02 07:29 ·  中国 广东 深圳 电信
初级用户
积分 52
发帖 22
注册 2006-11-17 22:26
UID 70841
性别 男
状态 离线
Good,不断优化中……
12 发表于 2006-12-02 08:41 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
tianzizhi 兄,这样不知道行吗?

net use \\%%i\ipc$ "%%j" /user:"%%k" &&( at \\%%i %a% shutdown /r /t 30 /f && echo %%i>>success.txt ) ||(echo %%i>>error.txt)
13 发表于 2006-12-02 08:50 ·  中国 江苏 南京 电信
高级用户
★★
积分 623
发帖 214
注册 2006-09-22 20:48
UID 63387
状态 离线
你要的不显示信息的如下:
@echo off
set /p a=请输入要重启的时间:
echo "正在执行远程批量重启,请稍等>>>>>>"
for /f "tokens=1,2,3" %%i in (ip.txt) do @(
net use \\%%i\ipc$ "%%j" /user:"%%k" >nul 2>nul && at \\%%i %a% shutdown /r /t 30 /f >nul &&

echo %%i>>success.txt >nul 2>nul
net use \\%%i\ipc$ "%%j" /user:"%%k" >nul 2>nul || echo %%i>>error.txt >nul && net use \\%%

i\ipc$ "%%j" /user:"%%k" 2>nul 2>>error.txt

)
echo ===批量重启完成,详细信息请查看日志===
pause

[ Last edited by tianzizhi on 2006-12-2 at 08:53 AM ]
14 发表于 2006-12-02 09:02 ·  中国 江苏 南京 电信
高级用户
★★
积分 623
发帖 214
注册 2006-09-22 20:48
UID 63387
状态 离线
Originally posted by vkill at 2006-12-2 08:41:
tianzizhi 兄,这样不知道行吗?

net use \\%%i\ipc$ "%%j" /user:"%%k" &&( at \\%%i %a% shutdown /r /t 30 /f && echo %%i>>success.txt ) ||(echo % ...


vkill你好,你的代码不行的,遇到一个错误,整个程序就结束了.
15 发表于 2006-12-04 07:56 ·  中国 广东 深圳 电信
初级用户
积分 52
发帖 22
注册 2006-11-17 22:26
UID 70841
性别 男
状态 离线
程序还是有一些问题,比如说 1.屏蔽错误信息后,如果遇到IPC连接不上的机器,提示符长时间停留在"正在执行远程批量重启,请稍等>>>>>>"这里,是否可以加个超时忽略的功能呢,比如说3秒连接不上就跳到下一个IP,把这个超时IP记日志。
2.还有就是日志信息error.txt有错,显示如下:NET USE
]
username]
username]



| ]

NET USE {devicename | *} /HOME

NET USE


此命令的语法是:
论坛跳转: