Como usar Ruby para administrar estações Windows: Ruby + WMI = mais tempo de sobra para o administrador aprender outras coisas novas

Olá,

conforme prometido, estou postando sobre Ruby. Mas, diferentemente dos 90% da Internet que fala de Ruby voltado para Web, vou exemplificar como usá-lo para administração de sistemas Windows, que é mais minha praia.

Primeiro, uma introdução: Ruby é o nome de uma linguagem de programação interpretada, semelhante ao Python (quem usa as duas vai querer me bater por escrever isso, mas no final as duas são parecidas sim). Ela é totalmente orientada à objetos, e é legal para quem está aprendendo esse paradigma, assim como Java e C#. Ela possui recursos modernos e é extremamente simples de se programar. Basta ter algum background em programação, claro.

No entanto, por ser interpretada acredito, é bem útil para administração de sistemas. Do outro lado do muro, vários administradores do mundo Unix/Linux usam linguagens desse tipo com bastante sucesso para automatizar tarefas que fazem com frequência, como backup, por exemplo. Nesse time de linguagens, as mais famosas são as de Shell (Bash, sh, ksh) e de scripting/interpretadas (Python, Perl e Ruby, que citei acima). Eu particularmente não tenho problema nenhum em programar em nenhuma delas, embora não conheça todas elas a fundo. São relativamente simples. Uma vez aprendida uma, aprender outra se torna fácil. O problema, como Jeffrey Snover descreve no blog dele, é que não há uma sintonia muito grande entre elas e entre as outras ferramentas. É possível trabalhar com todas ao mesmo tempo, mas a interface entre elas e os comandos nativos precisa ser estudada antes de se criar um script um pouco maior. Esse é um dos diferenciais do Windows Powershell, que trabalha com OO e o framework do .Net diretamente na linha de comando.

Pois bem, eu acredito que dê para trabalhar tranquilamente com Ruby em um ambiente misto, com Windows 98, 2000 e XP. É uma saída interessante, uma vez que nesses SOs, a versão do VBScript/WSH é diferente, e algumas ferramentas (ADSI e WMI, por exemplo) não são suportadas igualmente neles. A principal vantagem, ao meu ver, é que o interpretador dessa linguagem não precisa sequer ser instalado, e pode rodar facilmente em um compartilhamento na rede.

Vamos ao meu exemplo. No script abaixo, eu consigo acessar o WMI do computador usando Ruby para desligar o mesmo. Para fazer isso rodar em vários computadores, basta modificar a linha de conexão ao WMI (mérito do WMI, claro).

require 'win32ole'
wmi = WIN32OLE.connect 'winmgmts://./root/cimv2'
so = wmi.ExecQuery 'select * from win32_operatingsystem'
arrSO = Array.new
so.each {|item| arrSO.push item}
arrSO.first.win32shutdown 6
#esse 6 é o código da operação... equivale à forced_reboot e pode ser encontrado aqui

Bom, é isso. Basta salvar com extensão .rb e executar com o comando ruby <nome do arquivo>

Até mais!

Categorias dessa postagem:

Comentários