몇 달 전에이 PowerShell 코드가 블로그에서 발견되었습니다. 외부 프로그램을 사용하지 않고 원하는 MAC 주소로 WOL (Wake-On-LAN) 신호를 보냅니다. 블로그 게시물에 댓글을 달았고 저자가 스크립트에 대한 궁금증 때문에 스크립트 뒤에있는 논리를 설명하도록 요청했습니다. 나중에 블로그 게시물로 돌아가서 작성자가 내 댓글에 답글을 남겼는지 확인합니다. 나는 작가가 충돌로 인해 블로그를 잃어 버렸다 고 말한 페이지로 리다이렉트되었다는 사실에 놀랐다. 나는 그것의 세부 사항을 기억할 수 없다. 그러나 나는 그 블로그를 더 이상 북마크하지 않았다고 생각하지 않는다.이 wake-on-LAN 스크립트의 작동 원리를 설명하십시오.
이제이 코드를 Stack Overflow에서 살펴보고 그 논리를 나에게 설명해달라고 요청하고 싶습니다. 각 줄에 대한 설명은 환상적 일 것입니다. 나는 이것이 어떻게 작동하는지 알고 싶어합니다. 서브넷에서 작동한다는 점에서 다른 스크립트보다 강력합니다. 네트워킹에 대해서는 많이 알지 못합니다.
내가 가장 궁금해하는 점 중 하나는 끝에있는 for 루프입니다. 신호를 여러 번 보내는 이유는 무엇입니까? 왜 다른 포트에 있습니까? 그러나 나는 전체 스크립트 뒤에있는 논리를 정말로 알고 싶습니다.
코드 :
param (
$targetMac,
$network = [net.ipaddress]::Broadcast,
$subnet = [net.ipaddress]::Broadcast
)
try {
if($network.gettype().equals([string])) {
$network = [net.ipaddress]::Parse($network);
}
if($subnet.gettype().equals([string])) {
$subnet = [net.ipaddress]::Parse($subnet);
}
$broadcast = new-object net.ipaddress (([system.net.ipaddress]::parse("255.255.255.255").address -bxor $subnet.address -bor $network.address))
$mac = [Net.NetworkInformation.PhysicalAddress]::Parse($targetMac.toupper().replace(".",""))
$u = New-Object net.sockets.udpclient
$ep = New-Object net.ipendpoint $broadcast, 0
$ep2 = New-Object net.ipendpoint $broadcast, 7
$ep3 = New-Object net.ipendpoint $broadcast, 9
$payload = [byte[]]@(255,255,255, 255,255,255);
$payload += ($mac.GetAddressBytes()*16)
for($i = 0; $i -lt 10; $i++) {
$u.Send($payload, $payload.Length, $ep) | Out-Null
$u.Send($payload, $payload.Length, $ep2) | Out-Null
$u.Send($payload, $payload.Length, $ep3) | Out-Null
sleep 1;
}
} catch {
$Error | Write-Error;
}
이 광고 http://thepowershellguy.com/blogs/posh/archive/2007/04/01/powershell-wake-on-lan-script.aspx –