Tutoriais‎ > ‎Windows‎ > ‎

Scripts Avançados no Windows

postado em 24 de mai de 2013 20:51 por Prof. Rodrigo Costa   [ 24 de mai de 2013 21:43 atualizado‎(s)‎ ]
Um shell script é um pequeno programa que armazena uma sequencia de ações realizadas através da interface de linha de comando de um sistema. 

Neste post, irei falar sobre um tipo de shell script que permite a utilização de recursos avançados do sistema, mas para podermos entender melhor do que se trata, dividi o post em duas seções. Na primeira descrevo o conceito dos shell  scripts e na segunda vou falar e mostrar um exemplo de uso desse script avançado.
 

1. Shell Script

No linux, qualquer arquivo de texto com permissão de execução pode conter um script e ser executado através do terminal. No windows, além dos executáveis, apenas os arquivos de lotes, em que são armazenados sequencias de comandos do interpretador, tem permissão de serem executados. Desde o DOS, conhece-se os arquivos de extensão .bat como arquivos de lote, mas os arquivos com extensão .cmd também são arquivos de lote a partir do windows NT.

Em qualquer um destes, pode-se criar pequenos programas estruturados que utilizam construtores para instruções de repetição, seleção, desvio condicional e incondicional, entrada e saída de dados.

Na tabela a seguir são mostradas as principais instruções e estruturas disponíveis no windows e no Linux
 Instrução  Windows Linux 
 Declaração + inicialização de Variável  SET NOME_VARIAVEL=VALOR  export NOME_VARIAVEL=VALOR
 Entrada de Dados    SET /P NOME_VARIAVEL=  read NOME_VARIAVEL
 Referência a variável %NOME_VARIAVEL%   $NOME_VARIAVEL
 Saída de Dados ECHO TEXTO
ECHO %VARIAVEL%
ECHO TEXTO e VALOR=%VARIAVEL% 
echo "Algum Texto"
echo $NOME_VARIAVEL
 Desvio Condicional   IF %VARIAVEL% ==VALOR
(
    SEQUENCIA DE COMANDOS
)
ELSE
(
    SEQUENCIA DE COMANDOS
)

 if condicao
    SEQUENCIA DE COMANDOS
else
    SEQUENCIA DE COMANDOS
fi
 Repetição  for /R %v IN (*.ini) DO echo %v 
imprime o nome de todos os arquivos .ini dentro do diretório corrente e de todos os sub-diretorios.
selection =
until [ "$selection" = "0" ]; do
    read selection
done


Bem, falei até o momento sobre o básico do shell script, mas este tópico tem como objetivo falar sobre um recurso avançado do windows chamado Windows Scripting Host.

2. Windows Scripting Host (WSH)

Permite acesso a recursos privilegiados dos recursos do Windows desde sua versão 98. O mesmo é muito usado para criar scripts para serem realizados durante o login do sistema. Mas, através do WSH pode-se dar privilégio de administrador à ao prompt de comando ou realizar funções avançadas do sistema como ejetar a bandeja do cd-rom do computador.

Um diferencial do WSH para os arquivos de lote é a sintaxe de comando utilizada. Os arquivos de lote, como todo shell script, tem sintaxe de texto definidas pelo interpretador de comando. Os WSH são mais interessantes pois permitem a utilização de diversas linguagens como o PHP, PERL, BASIC, VB, PYTHON, JAVASCRIPT. Isto com certeza facilita o desenvolvimento deste tipo de script.

É simples criar scripts WSH, basta realizar os seguintes comandos
  1. criar um arquivo .vbs (caso vc queira usar o VB) ou .js (para usar JAVASCRIPT) contendo um script desejado
  2. chamar o comando csscript.
Por exemplo, o seguinte script ejeta os cdroms da máquina.
Set oWMP = CreateObject("WMPlayer.OCX.7" )
Set colCDROMs = oWMP.cdromCollection
if colCDROMs.Count >= 1 then
    For i = 0 to colCDROMs.Count - 1
        colCDROMs.Item(i).Eject
        Next ' cdrom
End If

Porque você não tenta fazer o seu?

2.1. Procurando mais transparência

Uma limitação do uso direto de um .vbs é que o mesmo pode ser usado como forma de transferencia de virus. Isto faz com que qualquer anti-virus entenda os arquivos .vbs como potenciais ameaças.

Para deixar algo mais transparente para o usuário pode-se criar um arquivo de lote (.bat) que cria um .vbs temporário e depois o executa. Seria algo assim:

@ECHO OFF
ECHO Set oWMP = CreateObject("WMPlayer.OCX.7" ) > %TEMP%\cd.vbs
ECHO Set colCDROMs = oWMP.cdromCollection >> %TEMP%\cd.vbs
ECHO if colCDROMs.Count >= 1 then >> %TEMP%\cd.vbs
ECHO     For i = 0 to colCDROMs.Count - 1 >> %TEMP%\cd.vbs
ECHO         colCDROMs.Item(i).Eject >> %TEMP%\cd.vbs
ECHO         Next ' cdrom >> %TEMP%\cd.vbs
ECHO End If >> %TEMP%\cd.vbs
cscript %TEMP%\cd.vbs

Desta forma, o anti-virus acaba não bloqueando seu script.

Essa foi a forma realizada na outra postagem : https://sites.google.com/site/rodccosta/tutoriais/windows/sudo-windows

Comments