从Windows一键发送魔法包

问题描述 投票:0回答:2

WOL 通过路由器工作得非常好,但这需要登录到控件并通过菜单浏览。我想通过一(双击)点击来唤醒机器。

我试过了

无论我使用

cmd
还是 PowerShell 来尝试,都会抛出语法错误。

Bash 一行命令发送 LAN 唤醒魔术包,无需特定工具 可能在 Linux 上可以工作,但在 Windows 上绝对不行

是否有适用于 Windows 的单行代码或任何可以放入实际有效的 bash 批处理文件中的内容?


编辑:

我运行了第二个脚本(重命名为 .ps1,更改了 PowerShell 中的执行策略),但无法运行。

尝试过https://www.itnator.net/wake-lan-script-wol/但这会引发异常:

Send-Packet : Ausnahme beim Aufrufen von "Parse" mit 1 Argument(en):  "Die angegebene physikalische Adresse ist
ungültig."
In C:\wol-script.ps1:38 Zeichen:1
+ Send-Packet <mac-address>
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Send-Packet

Fehler beim Durchlaufen einer Auflistung: Die Sammlung wurde geändert. Der Enumerationsvorgang kann möglicherweise
nicht ausgeführt werden..
In C:\wol-script.ps1:29 Zeichen:3
+         $Error | Write-Error;
+         ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Collecti...numeratorSimple:ArrayListEnumeratorSimple) [], Runt
   imeException
    + FullyQualifiedErrorId : BadEnumeration
windows wake-on-lan
2个回答
1
投票

https://www.gammadyne.com/cmdline.htm#wol 有效,而且“仅”193K(go-wol 约为 5MB)。
我将在它周围放置一个批处理脚本,然后我就完成了。
路由器设置的深层链接会更小,但我猜 AVM 软件不允许这样做。

剩下的唯一希望就是通过 Magic Packet 使机器休眠,但我的网卡可能太旧了。我想我会使用 PuTTY 来实现这一点。

感谢大家的挖掘!


0
投票

我在另一个问题/答案网站上找到了一个简单的 Powershell 脚本,该脚本有效。我做了一些小的更改(添加了解释如何使用它的注释块,添加了参数,以便可以预先提供必要的信息) - 这里是:

<#
    Send-WOL.ps1
    Sends "magic" Wake on LAN packet to attempt to wake the target computer
    It is necessary to specify another computer on the same subnet as the target since the packet
    is only broadcast to the subnet the target is on
    Parameters: Target (required): MAC address of target (xx:xx:xx:xx:xx:xx)
                RemoteIP (required): IP address of another computer on the same subnet as target
#>

# Setup params
Param(
    [Parameter(Mandatory=$true)][String]$Target,
    [Parameter(Mandatory=$true)][String]$RemoteIP
)

Write-Verbose -Message "Converting MAC address $($Target) to a byte array" -Verbose
$MacByteArray = $Target -split "[:-]" | ForEach-Object { [Byte] "0x$_"}
[Byte[]] $MagicPacket = (,0xFF * 6) + ($MacByteArray * 16)
Write-Verbose -Message "Broadcasting Wake-on-LAN packet to target." -Verbose
Invoke-Command -ComputerName $RemoteIP -ScriptBlock {
    $UdpClient = New-Object System.Net.Sockets.UdpClient
    $UdpClient.Connect(([System.Net.IPAddress]::Broadcast),7)
    $UdpClient.Send($using:MagicPacket,$using:MagicPacket.Length)
    $UdpClient.Close()
}
© www.soinside.com 2019 - 2024. All rights reserved.