Hallo,
ich habe zwei Powershell-Funktionen gefunden, mit denen man einen Rechner per WoL wecken können sollte.
(mit einer anderen Software vom gleichen Rechner geht das auch).
Leider funktionieren beide nicht, d.h. der Rechner wird nicht geweckt.
Ich teste das in der Power-Shell IDE ohne Admin Rechte.
Woran kann das liegen?
Gruß,
Hendrik
ich habe zwei Powershell-Funktionen gefunden, mit denen man einen Rechner per WoL wecken können sollte.
(mit einer anderen Software vom gleichen Rechner geht das auch).
Code:
function Invoke-WakeOnLan
{
param
(
# one or more MACAddresses
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
# mac address must be a following this regex pattern:
[ValidatePattern('^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$')]
[string[]]
$MacAddress
)
begin
{
# instantiate a UDP client:
$UDPclient = [System.Net.Sockets.UdpClient]::new()
}
process
{
foreach($_ in $MacAddress)
{
try {
$currentMacAddress = $_
# get byte array from mac address:
$mac = $currentMacAddress -split '[:-]' |
# convert the hex number into byte:
ForEach-Object {
[System.Convert]::ToByte($_, 16)
}
#region compose the "magic packet"
# create a byte array with 102 bytes initialized to 255 each:
$packet = [byte[]](,0xFF * 102)
# leave the first 6 bytes untouched, and
# repeat the target mac address bytes in bytes 7 through 102:
6..101 | Foreach-Object {
# $_ is indexing in the byte array,
# $_ % 6 produces repeating indices between 0 and 5
# (modulo operator)
$packet[$_] = $mac[($_ % 6)]
}
#endregion
# connect to port 400 on broadcast address:
$UDPclient.Connect(([System.Net.IPAddress]::Broadcast),4000)
# send the magic packet to the broadcast address:
$null = $UDPclient.Send($packet, $packet.Length)
Write-Verbose "sent magic packet to $currentMacAddress..."
}
catch
{
Write-Warning "Unable to send ${mac}: $_"
}
}
}
end
{
# release the UDF client and free its memory:
$UDPclient.Close()
$UDPclient.Dispose()
}
}
function Send-WOL
{
<#
.SYNOPSIS
Send a WOL packet to a broadcast address
.PARAMETER mac
The MAC address of the device that need to wake up
.PARAMETER ip
The IP address where the WOL packet will be sent to
.EXAMPLE
Send-WOL -mac 00:11:22:33:44:55 -ip 192.168.2.100
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$True,Position=1)]
[string]$mac,
[string]$ip="255.255.255.255",
[int]$port=9
)
$broadcast = [Net.IPAddress]::Parse($ip)
$mac=(($mac.replace(":","")).replace("-","")).replace(".","")
$target=0,2,4,6,8,10 | % {[convert]::ToByte($mac.substring($_,2),16)}
$packet = (,[byte]255 * 6) + ($target * 16)
$UDPclient = new-Object System.Net.Sockets.UdpClient
$UDPclient.Connect($broadcast,$port)
[void]$UDPclient.Send($packet, 102)
}
Invoke-WakeOnLan -MacAddress '00:22:4D:AA:xx:xx' -Verbose
Send-WOL -mac '00:22:4D:AA:xx:xx'
Leider funktionieren beide nicht, d.h. der Rechner wird nicht geweckt.
Ich teste das in der Power-Shell IDE ohne Admin Rechte.
Woran kann das liegen?
Gruß,
Hendrik