Command.com e CMD.exe vs VBScript e Windows Script Host

Olá,

vou escrever agora sobre uma dúvida que ocorre com frequência entre profissionais de TI ao administrar servidores e estações: dado um problema, qual a ferramenta mais indicada: o prompt de comandos (COMMAND.COM e CMD.EXE) e os scripts feitos em BAT e CMD ou as ferramentas de script mais recentes, o Windows Script Host e os scripts .VBS e .JS?

A resposta, como sempre, não é imediata: depende. E é sobre isso que eu vou escrever.

A idéia principal é tentar identificar no script se vai ser necessário, em sua maioria, executar outros comandos ou processar dados (usando variáveis e outras tecnologias como o WMI e ADSI, por exemplo). Em um arquivo CMD ou BAT simples, é muito mais simples executar um comando e analisar a saída dele, uma vez que para fazer isso basta digitar a linha de comando num arquivo texto, da mesma forma que você digitaria na linha de comando. Num arquivo VBS ou JS são necessários outros passos adicionais para executar um comando, mas é muito mais simples de se fazer algum processamento com variáveis, como por exemplo, trocar todos os caracteres _ por - em uma string.

Esse tipo de desvantagem não existe no PowerShell. Scripts .PS1 aceitam tanto comandos simples em uma linha quanto possuem recursos avançados de linguagens de programação para manipulação de dados. Isso faz dele uma ferramenta completa.

Caso ainda seja necessário criar scripts multiplataforma ou caso você queira aprender uma única linguagem para utilizar em scripts para Windows e Linux, recomendo estudar a linguagem Ruby. Ela é poderosa e ao mesmo tempo possui uma sintaxe simples, que permite um fácil aprendizado mesmo para quem não domina técnicas de programação.

Espero ter ajudado!

Até logo,

Vinicius

Categorias dessa postagem: , , , ,

Estendendo o WMI: sim, você pode criar suas classes!

Olá,

encontrei um link muito bom revirando meus bookmarks. Na verdade procurava outra coisa, mas acabei clicando no link para ver o que era e encontrei uma pérola: um artigo do Greg Stemp, um dos Scripting Guys (os de verdade, que trabalha na MS e cuida do ScriptCenter) falando sobre como estender o WMI criando suas próprias classes.

http://msdn2.microsoft.com/en-us/library/ms974554.aspx

Não é nada de outro mundo e o exemplo que ele dá para criar uma classe que monitora programas instalados observando uma chave no registro é muito legal. Recomendo para quem já está bom em VBScript e Windows Script Host e quer avançar um pouco mais.

Até logo!

Categorias dessa postagem: ,

Logoff do usuário atual

Olá,

um desconhecido (na verdade ele se chama Reginaldo Costa, mas eu não conheço) me perguntou por email como fazer para forçar o logoff do usuário via script. Encontrei este na Internet e resolvi postar aqui, dado que vários frequentadores deste site sugeriram que eu mesmo já modificasse alguns dos scripts que eu ensino.

A idéia básica é simples: há um script pronto no ScriptCenter que serve para desligar o computador, via WMI (logo, funciona tanto localmente quanto para reiniciar micros remotamente). Ele usa o método Win32Shutdown para fazer o serviço. O que pouca gente sabe é que esse método também pode ser usado para fazer o logoff do usuário. Basta trocar o valor da constante no início do script. Os valores possíveis podem ser encontrados aqui.

Não testei, mas deve funcionar.

Const LOGOFF = 4
strComputer = "127.0.0.1"  'aqui vai no nome do computador ou o IP
Set objWMIService = GetObject("winmgmts: {(Shutdown)}" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("SELECT * FROM Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
ObjOperatingSystem.Win32Shutdown(LOGOFF)
Next

Categorias dessa postagem:

Cuidado com comparações indevidas: PowerShell ou Python?

Primeiro, recomendo a leitura do link abaixo. Ao menos vale a pena pra ter uma idéia do que eu vou comentar.

http://www.gossamer-threads.com/lists/python/python/612630

No link acima, há uma discussão sobre qual tecnologia seria interessante aprender. O criador da thread cita também um link que mostra os comentários de um DBA que fez um comparativo. Você pode ver essa comparação no link abaixo:

http://www.simple-talk.com/sql/database-administration/comparing-python-and-powershell-dba-scripting-/

A comparação em si até é legal... para aprender. Tem vários exemplos de como automatizar tarefas com PowerShell e Python.

Agora vamos ao que eu acho disso tudo. Primeiramente, queria deixar bem claro que gosto tanto de Python quanto de PowerShell. São duas ferramentas fantásticas. Gosto muito também de VBScript, JScript, Ruby... até o bom e velho CMD/BAT tem me ajudado bastante ultimamente. São todas ferramentas muito boas, com algumas deficiências, claro... cada uma na sua.

O bom profissioanal de TI, seja ele desenvolvedor ou profissional da área de infraestrutura, deve ter bons fundamentos. E na minha opinião, com bons fundamentos ele é capaz de se virar com qualquer tecnologia. Eu bato na tecla que, por mais que as tecnologias sejam importantes e seja indispensável que você domine algumas delas, sem a base teórica e bons fundamentos sobre computação, você terá muito mais dificuldades para continuar se atualizando. E atualização de conhecimento na nossa área é obrigatório!

Vamos à um exemplo prático: pensem na estrutura de decisão if-then-else. Parece algo básico demais, mas algumas pessoas realmente não entendem direito como montar uma e como encadear várias delas. Essa estrutura é indispensável para desenvolvedores, seja qual for a linguagem. E se a linguagem não tiver esse recurso (sim, existem linguagens que não tem IFs), você pode construir o seu. Para qualquer profissional de TI, compreender uma rotina if-then-else pode ajudar a determinar mais rápido as causas de um problema em um computador, por exemplo. É questão de lógica.

Bom, voltemos ao PowerShell x Python. Não creio que seja possível determinar uma tecnologia melhor. Ambas tem suas vantagens. Python é uma linguagem de programação completa, orientada à objetos, com um conjunto de classes padrõ bem rico e de funcionamento simples. PowerShell é um shell orientado à objetos, que trabalha extensivamente com a combinação de pequenos comandos (cmdlets) através de pipes, variáveis e outros recursos, com o objetivo de facilitar a administração de servidores. Não faz sentido comparar diretamente as duas coisas.

No exemplo do link que eu enviei, o autor compara as duas quanto à capacidade de automação de tarefas administrativas de servidores de bases de dados. Mas ambas possuem recursos que permitem administrar um SQL Server, por exemplo. O que podemos usar como parâmetro para comparar e descobrir qual é melhor? Número de linhas? Eu acredito que não. Eu creio que a facilidade para criar um código dado um conjunto de recursos disponíveis (sejam eles classes ou cmdlets, nesse caso) é a melhor saída, mas medir a "facilidade" é algo subjetivo demais. E o gosto de cada um é influenciado pelo conhecimento que o profissional tem. Para mim, nenhuma das duas é melhor que a outra. Elas foram feitas com propósitos diferentes.

O que eu faço hoje: quando surge um problema, após a análise inicial, escolho se é realmente necessário resolver o problema com scripting e, nesse caso, qual linguagem utilizar. Parece bobeira, mas ultimamente eu tenho escolhido BAT e VBScript na maioria das vezes por precisar que um único script funcione com as configurações padrão do Windows 2000 ou superiores. E é exatamente isso que eu recomendo: aprendam a base, depois as tecnologias. Pense nelas como um leque de ferramentas que você pode escolher para resolver um problema. Escolha a melhor para cada situação.

PowerShell é bem legal... mas VBScript, JScript, C, C++, Python, Ruby, CMD, BAT, Java, C#/VB.Net e Perl também são. =)

No próximo post vou retornar com algumas dicas que eu tenho utilizado ultimamente nas minhas tarefas do dia-a-dia.

Até logo!

Categorias dessa postagem: ,

Usando PowerShell para enviar mensagens XMPP (Google Talk e Jabber, por exemplo)

Olá,

para os que não estão convencidos ainda do que o PowerShell possibilita, aqui vai mais um exemplo curioso: como enviar mensagens para IM que usam o protocolo XMPP.

http://halr9000.com/article/455

Para quem não sabe, XMPP é um protocolo aberto para Instant Messengers. Em especial, este protocolo é usado pelo Google Talk e pelo Jabber.

Tudo bem, eu concordo: qual é a grande utilidade disso no dia a dia? Pequena... talvez algum script de backup que envie mensagens por IM para administradores, gatilhos anti-roubo de senha de admin local ou coisa do tipo... algum sistema de perguntas/respostas comuns em uma rede ou simplesmente um robô de suporte técnico =). Mas o que é interessante demonstrar é que o PowerShell é capaz de atender as mais diversas necessidades, justamente porque possui muitos recursos e é extremamente fácil de utilizar.

Na minha opinião, atualmente os usos mais interessantes do PowerShell estão entre desenvolvedores que o utilizam para automatizar procedimentos de compilação, montagem, testes unitários e de integração. Em português bem popular: dá pra fazer miséria com ele! Mas não fica só aí. Basta olhar no arquivo do meu blog =).

 

Abraços e até mais!

Categorias dessa postagem: