可使用PowerShell達到遠端開機的功能

$strMAC="00-E0-18-C0-AC-6B"
$mac = new-object byte[] 6
$i=0;
foreach($m in $strMAC.Split("-"))
{
    $mac[$i] = [Byte]("0x"+$m)
    $i++;
}
$UdpClient = new-object System.net.sockets.UdpClient;
$UdpClient.Connect([System.Net.IPAddress]::Broadcast, 40000);
$packet = new-object byte[] 102
for($i = 0; $i -lt 6; $i++){$packet[$i] = [Byte]"0xFF" }
for ($i = 1; $i -le 16; $i++)
{
     for ($j = 0; $j -lt 6; $j++)
     {
         $packet[$i*6+$j] += $mac[$j]
     }
}
$UdpClient.Send($packet, $packet.Length);

 

假設我們今天要開啟許多台電腦
而這些電腦的MAC address可來自某檔案(我們當然可以利用PowerShell先行做其他的處理)
而非一定要將這些MAC address寫死在程式中

我們將上述的Script包成一個filter
filter WOL
{
     $strMAC="00-E0-18-C0-AC-6B"
     #我們僅需將第一行寫死的MAC address改成$_
     
$strMAC=$_
     #其餘一模一樣
}


再假設我們有一個MAC address List檔案 MacAddressList.txt
裡面每列為欲喚醒的MAC address

因此我們可使用以下指令喚醒電腦
PS C:\> get-content D:\MacAddressList.txt | WOL

看! 多麼簡潔明白又有彈性^^

  • 本篇重點
    • 宣告固定長度的陣列
      • 如 new-object byte[] 6
    • 十六進位轉Byte
      • 如 [Byte]("0x"+"E0")
    • 使用.NET Framework類別
      • 如 new-object System.net.sockets.UdpClient
    • 使用.NET Framework靜態變數
      • [System.Net.IPAddress]::Broadcast
    • 使用filter
創作者介紹
創作者 ayowu 的頭像
ayowu

PowerShell@HungYuWu

ayowu 發表在 痞客邦 留言(2) 人氣()