WMI远程重启计算机

Lareina_wyz 2010-12-07 11:23:36
private void button1_Click(object sender, EventArgs e)
{
//制定生成WMI连接所需要的所有设置
ConnectionOptions op = new ConnectionOptions();
op.EnablePrivileges = true;

op.Username = ""; //远程计算机用户名称
op.Password = ""; //远程计算机用户密码

//设置操作管理范围
ManagementScope scope = new ManagementScope("\\\\" + "" + "\\root\\cimv2", op);//

scope.Options.EnablePrivileges = true;


scope.Connect(); //将此ManagementScope 连接到实际的WMI 范围


ObjectQuery oq = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
ManagementObjectSearcher query = new ManagementObjectSearcher(scope, oq);

//得到WMI控制
ManagementObjectCollection queryCollection = query.Get();


foreach (ManagementObject obj in queryCollection)
{
obj.InvokeMethod("reboot", null); //执行重新启动计算机
}
...全文
407 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lareina_wyz 2011-02-25
  • 打赏
  • 举报
回复
谢谢大家帮忙,抱歉这么久才结贴。
这个问题我会继续研究,最近换了系统,变成win7了,还没研究13楼说的方法呢,有时间会继续研究的。
ncqingchuan1976 2010-12-11
  • 打赏
  • 举报
回复
你的服务器是不是windows server版本的,是的话就是服务器的安全模式是经典验证模式,你测试的机器是不是XP是的话那就是安全模式是来宾验证模式,你把XP的安全模式更改为经典模式就可以了.
Lareina_wyz 2010-12-10
  • 打赏
  • 举报
回复
谢谢大家,这个问题解决了,不过不知道为什么。我使用服务器运行代码然后就成功了,可是服务器为什么可以就不知道了,谁知道为什么啊?
wzywing 2010-12-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 haishenshizi 的回复:]
ManagementScope scope = new ManagementScope("\\\\" + "" + "\\root\\cimv2", op);//
不清楚是不是需要获取完整的计算机名称
[/Quote]

不需要计算机名,只需要IP地址.

报 The RPC server is unavailable 应该是本地135端口的问题,LZ可以检查下是否正常开启.防火墙也要关闭.

我之前有做过扫描135漏洞端口的程序,其中就是利用WMI来强制打开对方23端口实现入侵的,贴上来给你参考下.

private void OpenTelnet()
{
try
{
ManagementBaseObject iObj;
ManagementBaseObject oObj;
ConnectionOptions option = new ConnectionOptions();
option.Username = "administrator";
option.Password = "";
string path = "\\\\" + ip2 + "\\root\\cimv2";
ManagementScope scope = new ManagementScope(path, option);
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Service WHERE DisplayName = 'Telnet'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection mc = searcher.Get();
foreach (ManagementObject mo in mc)
{
if (mo["StartMode"].ToString() != "Manual")
{
iObj = mo.GetMethodParameters("ChangeStartMode");
iObj["StartMode"] = "Manual";
oObj = mo.InvokeMethod("ChangeStartMode", iObj, null);
}
mo.InvokeMethod("StartService", null);
lbl.Text = " Telnet端口已成功打开!";
TelResult("已打开");
}
}
catch
{
MessageBox.Show("无法连接对方主机!","系统提示");
TelResult("未打开");
lbl.Text = " 状态: 等待用户操作";
}
}
ncqingchuan1976 2010-12-08
  • 打赏
  • 举报
回复
对方的机器估计是安全策略导致,将组策略中-WINDOWS设置-本地策略-安全选项-本地的共享及安全模型更改为经典模型应该就可以了
penglin1989 2010-12-08
  • 打赏
  • 举报
回复
可能是防火墙的原因哦!
Lareina_wyz 2010-12-08
  • 打赏
  • 举报
回复
我试试看!
happyday1799 2010-12-07
  • 打赏
  • 举报
回复
帮你顶,这个程序我也做过,但是没成功!好像是防火墙的原因。
Lareina_wyz 2010-12-07
  • 打赏
  • 举报
回复
不知道为什么,可以重启本地的计算机,但是就是没有办法重启远程的,RPC和WMI服务都是开着的,两台机器都是,我试了好几次,可是都是不行。
Lareina_wyz 2010-12-07
  • 打赏
  • 举报
回复
账号和密码都是对的,防火强我也关了,可是就是不行,我运行出现的错误是The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
在别人的电脑上运行是Access is denied。
我都要无语了。忘了说了,我用的是C#

关远程的机器要知道人家的账号和密码,还有给你的账号有没有相应的权限
给个代码给你参考下
VB.NET code
Dim m_ObjectQuery As ObjectQuery
Dim m_ConnectionOption As New ConnectionOptions
Dim I As Integer

With m_ConnectionOption
.Username = UserName
.Password = Password

End With
m_Scop = New ManagementScope("\\" & MachineName & "\Root\Cimv2", m_ConnectionOption)

我将这个改成c#,可是运行结果是一样的。
Lareina_wyz 2010-12-07
  • 打赏
  • 举报
回复
谢谢2楼的,这个问题困扰我好久了,一直就没解决,郁闷!!!
ncqingchuan1976 2010-12-07
  • 打赏
  • 举报
回复
关远程的机器要知道人家的账号和密码,还有给你的账号有没有相应的权限
给个代码给你参考下

Dim m_ObjectQuery As ObjectQuery
Dim m_ConnectionOption As New ConnectionOptions
Dim I As Integer

With m_ConnectionOption
.Username = UserName
.Password = Password

End With
m_Scop = New ManagementScope("\\" & MachineName & "\Root\Cimv2", m_ConnectionOption)
龍月 2010-12-07
  • 打赏
  • 举报
回复
账号密码 对不
haishenshizi 2010-12-07
  • 打赏
  • 举报
回复
ManagementScope scope = new ManagementScope("\\\\" + "" + "\\root\\cimv2", op);//
不清楚是不是需要获取完整的计算机名称
Remote Computer Manager 是一款非常实用的远程计算机管理系统,支持IPv4和IPv6协议和远程桌面控制,可以作为服务运行,允许网络管理员集中管理远程计算机进行诸如远程桌面控制、远程关机、运行(执行)命令、启动应用程序和进程、通过IPv4进行局域网唤醒、通过IPv6进行局域网唤醒、锁定工作站、登录、注销、睡眠、休眠、唤醒、重新启动、开关机、锁定和解锁输入设备、注册表合并、文件复制、MSI软件包的安装、时钟(时间)同步等操作,是名副其实的远程计算机管理员 通过Remote Computer Manager大家可以使用Intel AMT(主动管理技术)和AMD DASH(系统的台式机和移动体系结构)执行远程关机、打开(打开)、关闭(关闭)并重新启动(重置)远程计算机,该远程计算机管理系统还可以获得每台计算机远程进程和服务列表、netstat信息、屏幕截图、注册表项、事件日志项以及其他详细信息,使用Remote Computer Manager用户只需单击一下即可在一台或多台网络计算机上进行远程操作,可以按照定义的时间表自动执行远程操作。 Remote Computrer Manager(远程计算机管理系统)特色功能简介: 远程桌面控件。 在远程计算机上对进程的操作(获取列表,创建和终止进程)。 在LAN PC上使用服务进行操作(获取列表,安装和卸载,启动和停止服务)。 查看网络PC的注册表。 浏览网络计算机的事件日志。 远程命令提示符。 在远程PC上启动(执行)应用程序和文件。 获取远程计算机的netstat信息。 拍摄网络PC的屏幕截图。 LAN计算机上的文件操作(发送文件,获取文件,复制文件,移动文件,重命名文件和删除文件)。 在网络PC上执行注册表操作(创建键,添加/编辑值)。 将注册表文件与网络计算机的注册表合并。 在远程PC上安装MSI软件包。 使用Windows PC的DCOM和WMI进行远程关机,重新启动,关闭电源。 远程重启,关机,使用Linux PC的SSH关机。 使用Intel AMT(vPro)和AMD DASH打开,关闭,重新引导并关闭网络计算机。 通过IPv4和IPv6唤醒局域网。 用魔术包唤醒网络计算机。 将网络PC切换到睡眠和休眠状态。 登录和注销远程计算机上的用户。 锁定工作站,锁定和解锁网络PC上的输入设备。 将消息发送到网络计算机。 浏览局域网计算机的文件。 远程PC上的时区和时间同步。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧