|
outmind
初级用户
积分 52
发帖 22
注册 2006-11-17
状态 离线
|
『楼 主』:
紧急求救,达人们请进!万分感激!
我手中有几百台WINDOWS服务器,现在需要每个月根据上面的安排重启一次。每台依次重启非常麻烦,想请教各位用什么方法,来下发命令或者重启比较便捷,谢谢!万分感激! 基本需要是能够根据上面下达的时间灵活批量重启所有机器,并且部署起来不需要花太多的时间。谢谢! 有好的方法能提高效率的达人最好加我QQ:9314651 ,再次感谢!
|
|
2006-11-29 14:02 |
|
|
tianzizhi
高级用户
积分 622
发帖 214
注册 2006-9-22
状态 离线
|
『第
2 楼』:
请问一下你的几百台服务器的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
此帖被 +8 点积分 点击查看详情 评分人:【 redtek 】 | 分数: +5 | 时间:2006-11-30 08:25 | 评分人:【 lxmxn 】 | 分数: +3 | 时间:2006-12-2 03:55 |
|
|
|
2006-11-30 01:52 |
|
|
outmind
初级用户
积分 52
发帖 22
注册 2006-11-17
状态 离线
|
『第
3 楼』:
非常感谢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
|
|
2006-11-30 04:32 |
|
|
tianzizhi
高级用户
积分 622
发帖 214
注册 2006-9-22
状态 离线
|
『第
4 楼』:
如果不修改组策略,进行连接的话可以用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
具体你再改,我也没法测验,有问题你再问.
|
|
2006-11-30 06:37 |
|
|
outmind
初级用户
积分 52
发帖 22
注册 2006-11-17
状态 离线
|
『第
5 楼』:
非常感谢,我已经初步有个想法了,正在测试中……
|
|
2006-12-1 04:25 |
|
|
tianzizhi
高级用户
积分 622
发帖 214
注册 2006-9-22
状态 离线
|
『第
6 楼』:
测试成功后,请把内容贴上来看看!
|
|
2006-12-1 06:14 |
|
|
outmind
初级用户
积分 52
发帖 22
注册 2006-11-17
状态 离线
|
『第
7 楼』:
好的,没有问题,大致思路是你那样,代码略微修改了一些。
|
|
2006-12-1 06:59 |
|
|
outmind
初级用户
积分 52
发帖 22
注册 2006-11-17
状态 离线
|
『第
8 楼』:
@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命令查看,任务是在里面的,但是到了时间不执行,为什么呢?
|
|
2006-12-1 23:11 |
|
|
tianzizhi
高级用户
积分 622
发帖 214
注册 2006-9-22
状态 离线
|
『第
9 楼』:
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 [\\computername] [ [id] [/DELETE] | /DELETE [/YES]]
AT [\\computername] time [/INTERACTIVE]
[ /EVERY:date[,...] | /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 ]
|
|
2006-12-1 23:59 |
|
|
tianzizhi
高级用户
积分 622
发帖 214
注册 2006-9-22
状态 离线
|
『第
10 楼』:
把日志的弄好了如下:
@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 ]
|
|
2006-12-2 06:48 |
|
|
outmind
初级用户
积分 52
发帖 22
注册 2006-11-17
状态 离线
|
|
2006-12-2 07:29 |
|
|
vkill
金牌会员
积分 4103
发帖 1744
注册 2006-1-20 来自 甘肃.临泽
状态 离线
|
『第
12 楼』:
tianzizhi 兄,这样不知道行吗?
net use \\%%i\ipc$ "%%j" /user:"%%k" &&( at \\%%i %a% shutdown /r /t 30 /f && echo %%i>>success.txt ) ||(echo %%i>>error.txt)
|
|
2006-12-2 08:41 |
|
|
tianzizhi
高级用户
积分 622
发帖 214
注册 2006-9-22
状态 离线
|
『第
13 楼』:
你要的不显示信息的如下:
@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 ]
|
|
2006-12-2 08:50 |
|
|
tianzizhi
高级用户
积分 622
发帖 214
注册 2006-9-22
状态 离线
|
『第
14 楼』:
Quote: | 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你好,你的代码不行的,遇到一个错误,整个程序就结束了.
|
|
2006-12-2 09:02 |
|
|
outmind
初级用户
积分 52
发帖 22
注册 2006-11-17
状态 离线
|
『第
15 楼』:
程序还是有一些问题,比如说 1.屏蔽错误信息后,如果遇到IPC连接不上的机器,提示符长时间停留在"正在执行远程批量重启,请稍等>>>>>>"这里,是否可以加个超时忽略的功能呢,比如说3秒连接不上就跳到下一个IP,把这个超时IP记日志。
2.还有就是日志信息error.txt有错,显示如下:NET USE
[devicename | *] [\\computername\sharename[\volume] [password | *]]
[/USER:[domainname\]username]
[/USER:[dotted domain name\]username]
[/USER:[username@dotted domain name]
[/SMARTCARD]
[/SAVECRED]
[[/DELETE] | [/PERSISTENT:{YES | NO}]]
NET USE {devicename | *} [password | *] /HOME
NET USE [/PERSISTENT:{YES | NO}]
此命令的语法是:
|
|
2006-12-4 07:56 |
|