从linuxterminalclosuresWindows机器

我正在linux机器上运行一个应用程序。 通过给出一个Windows机器的IP地址作为input,应用程序必须closuresWindows机器。 如果机器运行相同的操作系统,这是很容易的,但我很困惑如何在跨操作系统。

从Linux关闭Windows系统的命令 – :

$ net rpc -S <ip address> -U <username>%<password> shutdown -t 1 -f

这个命令可以从bash发出,甚至可以在cron作业中设置,以在特定的时间关闭计算机,默认情况下,这个命令会附带很多发行版。

可能还有更多的设置要做,尤其是对于Windows Vista,Windows 7和其他Windows版本,以允许远程关机:

部分A)在Windows机器上:

1)添加远程关机安全策略:

  • 运行secpol.msc

  • 在程序树中,打开Security Settings > Local Policies > User rights Assignment

  • Force shutdown from a remote system查找条目Force shutdown from a remote system

  • 编辑条目,添加将用于关机的Windows用户帐户(例如:nouknouk)

2)添加注册表项以禁用UAC远程限制:

  • 以管理员身份运行regedit.exe

  • 找到HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System

  • 创建一个名为LocalAccountTokenFilterPolicy的新注册表DWORD(32)值,然后为其分配值1

3)启动远程注册表服务:

  • 以管理员身份打开cmd.exe

  • 执行以下两个命令:

    sc config RemoteRegistry start= auto

    sc start RemoteRegistry

B部分)在Linux机器上:

1)安装包samba-common

这取决于你的Linux发行版,但是对于Debian和推导(Ubuntu,Linux Mint,…),apt-get命令可以这样执行:

apt-get install samba-common

2)要真正关闭你的Windows机器,从Linux上运行以下命令:

net rpc shutdown -f -t 0 -C 'message' -U userName%password -I xxx.yyy.zzz.ttt

哪里:

  • -f表示强制关闭所有应用程序(可能是强制性的)

  • -t 0是做之前的延迟(0表示“现在”)。

  • -U user%password是本地用户,并在Windows机器(在A部分中已被允许执行远程关机)的密码。

  • -I是要关机的Windows机器的IP地址。

这取决于你的基础设施 – 你如何验证Windows机器,你是否可以自己配置它们等等。如果是我,我会把Cygwin放在Windows盒子上,然后ssh给他们并运行shutdown -h 。 当然,还有其他方法可以做到这一点。

您需要一种方法来在Windows上启动一个shell,以便您可以运行内置于Windows的shutdown命令。

您可以为此安装Cygwin ,然后在Windows中安装SSH守护程序。 一旦运行,你的Linux机器就可以在Windows机器上运行命令,就像它是另一台Linux机器一样。

以下是在Windows中设置Cygwin的sshd的一些说明 。

选项1:在Windows上安装SSH服务器。 从任何方框登录到此服务器并调用shutdown命令。 我们使用Interix(微软的unix like环境)。 它带有一个telnet服务器 – 允许从其他机器调用Windows命令..

另一个选择:如果你在Windows上安装了samba,它可以连接到windows并调用windows命令

  net rpc SHUTDOWN ... 

(来自http://www.linuxforums.org/forum/red-hat-fedora-linux/60324-remote-shutdown-windows-linux-box.html#post573872

另一个选择:尝试rdesktop的Windows机器与关机命令(我用它运行Windows批处理脚本已关闭,不知道如果你可以直接调用shutodwn)

Linux使用telnet命令,确保telnet is enabled in Windows system