![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-26 23:09 |
共 47,812 主题排行 / 349,912 发帖 / 今日 2 篇 / 48,264 会员排行 |
| 其它操作系统综合讨论区 » 紧急求救,达人们请进!万分感激! |
| 可打印版本 3,518 / 22 |
| 第1楼 outmind | 发表于 2006-11-29 14:02 |
| 初级用户 发帖 22 积分 52 | |
|
紧急求救,达人们请进!万分感激! 我手中有几百台WINDOWS服务器,现在需要每个月根据上面的安排重启一次。每台依次重启非常麻烦,想请教各位用什么方法,来下发命令或者重启比较便捷,谢谢!万分感激! 基本需要是能够根据上面下达的时间灵活批量重启所有机器,并且部署起来不需要花太多的时间。谢谢! 有好的方法能提高效率的达人最好加我QQ:9314651 ,再次感谢!
|
|
| 第2楼 tianzizhi | 发表于 2006-11-30 01:52 |
| 高级用户 发帖 214 积分 623 | |
|
请问一下你的几百台服务器的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 |
|
| 第3楼 outmind | 发表于 2006-11-30 04:32 |
| 初级用户 发帖 22 积分 52 | |
|
非常感谢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楼 tianzizhi | 发表于 2006-11-30 06:37 |
| 高级用户 发帖 214 积分 623 | |
|
如果不修改组策略,进行连接的话可以用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楼 outmind | 发表于 2006-12-01 04:25 |
| 初级用户 发帖 22 积分 52 | |
|
非常感谢,我已经初步有个想法了,正在测试中……
|
|
| 第6楼 tianzizhi | 发表于 2006-12-01 06:14 |
| 高级用户 发帖 214 积分 623 | |
|
测试成功后,请把内容贴上来看看!
|
|
| 第7楼 outmind | 发表于 2006-12-01 06:59 |
| 初级用户 发帖 22 积分 52 | |
|
好的,没有问题,大致思路是你那样,代码略微修改了一些。
|
|
| 第8楼 outmind | 发表于 2006-12-01 23:11 |
| 初级用户 发帖 22 积分 52 | |
|
@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楼 tianzizhi | 发表于 2006-12-01 23:59 |
| 高级用户 发帖 214 积分 623 | |
|
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楼 tianzizhi | 发表于 2006-12-02 06:48 |
| 高级用户 发帖 214 积分 623 | |
|
把日志的弄好了如下:
@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楼 outmind | 发表于 2006-12-02 07:29 |
| 初级用户 发帖 22 积分 52 | |
|
Good,不断优化中……
|
|
| 第12楼 vkill | 发表于 2006-12-02 08:41 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
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楼 tianzizhi | 发表于 2006-12-02 08:50 |
| 高级用户 发帖 214 积分 623 | |
|
你要的不显示信息的如下:
@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楼 tianzizhi | 发表于 2006-12-02 09:02 |
| 高级用户 发帖 214 积分 623 | |
Originally posted by vkill at 2006-12-2 08:41: vkill你好,你的代码不行的,遇到一个错误,整个程序就结束了. |
|
| 第15楼 outmind | 发表于 2006-12-04 07:56 |
| 初级用户 发帖 22 积分 52 | |
|
程序还是有一些问题,比如说 1.屏蔽错误信息后,如果遇到IPC连接不上的机器,提示符长时间停留在"正在执行远程批量重启,请稍等>>>>>>"这里,是否可以加个超时忽略的功能呢,比如说3秒连接不上就跳到下一个IP,把这个超时IP记日志。
2.还有就是日志信息error.txt有错,显示如下:NET USE ] username] username] | ] NET USE {devicename | *} /HOME NET USE 此命令的语法是: |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |