Bom dia!
continuando meu post anterior, tenho aqui a primeira versão de uma função que criei como demonstração de utilização daquele pequeno script que consegue enviar pacotes UDP via rede local. Trata-se de uma aplicação extremamente útil em ambientes corporativos, principalmente quando você tem um boas informações sobre todas as máquinas: o WakeOnLan
Existem diversas aplicações na Internet com implementações do WakeOnLan, várias gratuitas e em várias linguagens de programação, tecnologias, etc. Minha intenção aqui é só demonstrar como fazer isso usando somente o Powershell e o .Net Framework. A linguagem do Powershell é bem parecida com C#, então estiver procurando como fazer um em C#, esse código pode ser facilmente adaptado. A principal vantagem do meu é a simplicidade e o fato de não precisar baixar nada da Internet pra fazer isso... você só precisa de um Bloco de Notas e de um Powershell!
A idéia do WakeOnLan é bem simples: primeiramente, o computador deve ser compatível com WOL (isso inclui ter PCI2.2, fonte ATX, placa de rede compatível, etc..). Isso pode ser normalmente identificado na BIOS do sistema, que deve conter uma opção que ativa/desativa WakeOnLan. Certifique-se de que a máquina que vai ser acordada está configurada corretamente.
Mas como funciona? O computador que pode ser acordado fica monitorando a placa de rede, procurando por um Magic Packet. Ao receber um, ela liga o computador. Esse Magic Packet nada mais é do que um pacote UDP enviado para o endereço de broadcast da rede, normalmente nas portas 7 ou 9, com FF FF FF FF FF FF nos 6 primeiros bytes e na sequência o endereço MAC da placa de rede repetido 16 vezes, totalizando 102 bytes. Há ainda a possibilidade de enviar também uma senha, mas isso não é muito utilizado e eu não implementei. Mais informações na Wikipédia.
Meu script é simples. Basta salvar em um arquivo .PS1 e chamar ele usando o que chamamos de dot-sourcing. É como executar um script, mas as funções (e também as variáveis, dados, constantes, aliases...) de dentro do script passam a valer também fora dele. A seguir, você chama a função wake-computer, que recebe dois parâmetros: o endereço MAC da placa e o endereço de broadcast
Exemplo:
. '.\wake-computer.ps1'
wake-computer 00:16:76:75:01:00 192.168.1.255
E agora, segue o código:
# wake-computer function
# by Vinicius Canto - MVP
#
# Usage: wake-computer
#
#
# format AA:BB:CC:DD:EE:FF, six numbers in hexadecimal, like the
# output of IPconfig command
#
#
# address must be in the format a.b.c.d, with a, b, c and d
# numbers between 0 and 255, the common form of an IP Address
#
# Example:
# wake-computer 00:16:76:75:AA:00 192.168.1.255
#
# For more information, contact-me: scripterbr (at) gmail (dot) com
#
# I'm looking for people to improve the code... if you want, contact me!
# example line that sends an UDP packet
# (new-object System.Net.Sockets.Socket(2,2,17)).SendTo("Vinicius",(new-object System.Net.IPEndPoint(([System.Net.IPAddress]::Parse("192.168.1.2")),2000)))
function wake-computer([String]$macAddress, [string]$broadcastAddress) {
$socket = new-object System.Net.Sockets.Socket(2,2,17)
$destination = [System.Net.IPAddress]::Parse($broadcastAddress)
$endpoint = new-object System.Net.IPEndpoint($destination,9)
# testing using 00 16 76 75 AA 00
[byte[]]$buffer = @(255,255,255,255,255,255)
$buffer += (($macAddress.split(':') | foreach {[byte]('0x' + $_)}) * 16)
$sent = $socket.Sendto($buffer, $buffer.length, 0, $endpoint)
"$sent bytes sent. The computer $macAddress may be initializing."
}
Recomendo tomar cuidado com as quebras de linha. A configuração do Blogger não favorece código fonte... Além disso, verifique se a sua configuração atual do Powershell permite executar scripts com o comando Get-ExecutionPolicy.
Sugiro também ficar de olho no blog do Wesley... ele anda estudando umas tecnologias novas sobre IAMT (acho q era isso) e elas envolvem, dentre outras coisas, gerenciamento remoto de computadores. Já já ele inventa algo legal e posta lá. O link tá aqui ou aqui do lado nos links.
Até a próxima!
Wake On Lan & Powershell: Acordando computadores na rede
Criado no dia 10 de Janeiro de 2007
Postado por
Vinicius Canto
às
08:59
Enviar por email para um amigo
Marcadores: powershell, udp, wakeonlan
3 comentários:
Qual a possibilidade de ativar uma maquina da rede usando o prompt de comando?
Desculpe, mas não entendi sua pergunta. Esse script É para linha de comando. Basta salvar o script e executar. A diferença é que, ao invés do Prompt de Comandos original do Windows, você deve instalar o Windows Powershell, que tem inúmeras vantagens.
Em todo caso, existem várias ferramentas para fazer a mesma coisa... eu só quis demonstrar como automatizar isso com o Powershell com um script simples. Uma dessas ferramentas é o mc-wol, que pode ser obtido gratuitamente.
Até mais,
Oi Vinicius.
Muito boa dica.
Preciso ligar computadores via wan?
Com o seu script é possível?
O que eu precisaria?
Postar um comentário