Данный сценарий отправляет "магический пакет" с MAC-адресом сетевого адаптера компьютера на широковещательный адрес его подсети
function Send-MagicPacket { <# .SYNOPSIS Командлет предназначен для удаленного включения компьютеров посредством Wake-On-Lan .DESCRIPTION Командлет отправляет "магический пакет", содержащий MAC-адрес сетевого адаптера компьютера, на широковещательный адрес подсети, к которой он принадлежит "Магический пакет" может формироваться с использованием следующих наборов параметров: - MAC-адрес сетевого адаптера и широковещательный адрес подсети - имя DHCP-сервера и имя "пробуждаемого" компьютера (MAC-адрес и широковещательный адрес будут определены на основании данных об аренде IP-адреса на DHCP-сервере) .PARAMETER MACAddress MAC-адрес сетевого адаптера компьютера .PARAMETER BroadcastAddress Широковещательный адрес подсети, к которой принадлежит компьютер .PARAMETER DHCPServerName Имя DHCP-сервера .PARAMETER ComputerName Имя "пробуждаемого" компьютера .INPUTS - .OUTPUTS - .NOTES (c) 2018 Александр Галков, [email protected] .EXAMPLE Send-MagicPacket -DHCPServerName dc.domain.local -ComputerName galkov.domain.local .EXAMPLE Send-MagicPacket -MACAddress 0a1b2c3d4e5f -BroadcastAddress 10.100.200.255 .LINK www.galkov.pro/powershell_script_for_turning_on_computers_using_wol #> [CmdletBinding()] Param ( [Parameter(Mandatory=$true,ParameterSetName = "Set1")][string]$DHCPServerName, [Parameter(Mandatory=$true,ParameterSetName = "Set1")][string]$ComputerName, [Parameter(Mandatory=$true,ParameterSetName = "Set2")][string]$MACAddress, [Parameter(Mandatory=$true,ParameterSetName = "Set2")][string]$BroadcastAddress ) $mac = $null $broadcast = $null #формируем значение MAC- и широковещательного адреса для отправки "магического" пакета if ($MACAddress -eq [string]::Empty -and $BroadcastAddress | -eq [string]::Empty) #значения получаем от DHCP-сервера { #формируем текстовые значения ip- и mac-адреса, а также маски подсети $ip = (Resolve-DnsName -Name $ComputerName -Type A).IPAddress $lease = Get-DhcpServerv4Lease -ComputerName $DHCPServerName -IPAddress $ip $mac = $lease.ClientID.Replace('-','') $scope = Get-DhcpServerv4Scope -ComputerName $DHCPServerName -ScopeId $lease.ScopeId $mask = $scope.SubnetMask.IPAddressToString #формируем текстовое значение широковещательного адреса подсети [uint32]$ip_numb = ([IPAddress]$ip).Address [uint32]$mask_numb = ([IPAddress]$mask).Address $subnet_numb = $ip_numb -band $mask_numb $inv_mask_numb = -bnot $mask_numb $broadcast_numb = $subnet_numb -bor $inv_mask_numb $broadcast = ([IPAddress]$broadcast_numb).IPAddressToString } else #значения задаем вручную { $mac = $MACAddress $broadcast = $BroadcastAddress } #формируем "магический пакет" $target=0,2,4,6,8,10 | % {[convert]::ToByte($mac.substring($_,2),16)} $packet = (,[byte]255 * 6) + ($target * 16) #отправляем "магический пакет" $udp_client = new-Object System.Net.Sockets.UdpClient $udp_client.Client.EnableBroadcast = $true $udp_client.Send($packet, 102, $broadcast, 9) | Out-Null Write-Host Магический пакет с MAC-адресом $mac отправлен на широковещательный адрес $broadcast }
Также можно скачать файл сценария отсюда