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); //执行重新启动计算机
}
...全文
422 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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);//
不清楚是不是需要获取完整的计算机名称

111,092

社区成员

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

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

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