Para muitos
administradores, a idéia de escrever um código já faz muitos pensarem "Isso não é o tipo de coisa que fazemos, isso é para os
desenvolvedores e programadores". O fato é que o script pode ser
tão difícil ou tão fácil como você optar por fazê-lo. Você pode escrever um
script longo e complicado para mapear unidades automaticamente, mas você precisa
fazê-lo? Não, pois o script pode ser tão simples como duas linhas:
Set oDrives =
CreateObject ("WScript.Network")
oDrives.MapNetworkDrive "Z:", \\SVR01\Home
oDrives.MapNetworkDrive "Z:", \\SVR01\Home
Nós vamos
entrar em mais detalhes um pouco mais a frente, o objetivo aqui é demonstrar
que script pode automatizar tarefas repetitivas. Quantas vezes você já mapeou
unidades no prompt de comando ou escrito em arquivos em lote (BAT)? Escrever um script poupará algum tempo.
Um pouco de história VBScript
Quando
VBScript surgiu, ele fazia parte do lançamento do Windows Microsoft Script
Technologies. VBScript e JScript (Java Script), foram ambos lançados para
facilitar a criação de scripts do lado do cliente em páginas da web. O
público-alvo inicial era, obviamente, os desenvolvedores web, e os
administradores de sistema não viram necessidade de envolver-se com ele. Além disso,
a maioria das informações em torno de aplicações de VBScript, em tecnologias
como a WMI (Windows Management Instrumentation) e ADSI (Active Directory Services
Interface) só estava disponível para desenvolvedores no SDK (Software
Development Kit) e outras informações específicas. Por fim, quando os
administradores conseguiram encontrar algumas informações sobre as
tecnologias, estvam escritos em pura linguagem de codificação que não era
perceptível a menos que você tivesse um desenvolvedor por perto.
Hoje, no
entanto, as informações sobre VBScript e tecnologias de script é amplamente
disponibilizado e os administradores estão percebendo a utilidade dos scripts
para tornar seu trabalho mais fácil.
Fundamentos do VBScript
VBScript
trabalha com objetos (especificamente objetos de automação) que são
simplesmente um conjunto menor de COM (Component Object Model). COM é o que
facilita a funcionalidade de itens como as dll e os exe. Vejamos o nosso
exemplo anterior:
Set oDrives =
CreateObject ("WScript.Network")
oDrives.MapNetworkDrive "Z:", \\SVR01\Home
oDrives.MapNetworkDrive "Z:", \\SVR01\Home
Neste
exemplo, estamos usando o método CreateObject para ligar o elemento (ou
objeto), WScript.Network, e dar-lhe o nome de "oDrives" para uso na
linha seguinte. Binding é o método usado para fazer uma conexão com um objeto
de automação (WScript.Network) e criar uma nova instância do objeto (oDrives).
Vamos agora chamar o método "MapNetworkDrive" em nosso objeto oDrives
seguido pelos argumentos direcionando o método para mapear o compartilhamento
Home que está em SVR01 à unidade Z: \.
Definições
A seguir
estão algumas definições utilizadas em VBScript:
Métodos - Funções
que um objeto pode executar. No exemplo anterior, foi utilizado o método
CreateObject para vincular o objeto WScript.Network.
Variáveis -
Locais na memória para armazenar dados. Observe o seguinte exemplo:
Comp = InputBox
("Digite o Nome do Computador", "Nome do Computador")
Neste
exemplo, estamos chamando uma InputBox (este solicita do usuário para entrar com
dados), dando-lhe uma descrição para o usuário que irá ler "Digite o nome
do computador" acima da InputBox, e atribuindo "Nome do
computador" para o título da janela de entrada quando ela aparece. Toda
esta informação é mantida na memória e armazenada como um valor para a variável
Comp. A menos que essa informação seja liberado da memória no final do script,
sempre que o variável Comp é chamada, o valor que foi digitado pelo usuário
será utilizado. As variáveis podem ter qualquer nome descritivo, desde que
não seja um nome reservado para uso como um componente de script, por exemplo WScript,
Const, Set, etc...
Constantes -
semelhantes às variáveis eles armazenam dados na memória, no entanto, a
constante deve ser definido dentro do script. Além disso, os valores não podem
ser alterados, uma vez que eles são definidos e irá manter os seus valores por
todo o script. Veja o seguinte exemplo de script:
Const FIRST_NAME = "Alan"
Const LAST_NAME = "Finn"
Wscript.Echo "Meu nome é", FIRST_NAME, LAST_NAME
Acima,
estamos declarando duas constantes; FIRST_NAME e LAST_NAME e atribuindo-lhes os
valores de Alan e Finn, respectivamente. A terceira linha utiliza o método de
eco do objeto WScript para imprimir a string "Meu nome é", então o
primeiro valor constante e, finalmente, o segundo valor constante em uma janela
pop-up. Copie e cole o script no bloco de notas e mude as constantes para
coincidir com o seu nome, em seguida, salve o arquivo como MeuScript.vbs e
clique duas vezes sobre ele para executar.
Operadores e
Controle de fluxo - Operadores são usados para comparar
expressões. Basicamente, é comparações matemáticas lógicas usadas em VBScript. Como exemplo, vamos dizer que x = 1 e y =
2. Um operador que comparar os dois e retornar uma resposta ou fazer outra
coisa com base nos resultados, tais como:
If x > y
then this statement is False
Else this statement is True
Else this statement is True
Obviamente 1
não é superior a 2, então o comando retorna com Verdadeiro (ainda que 2 é maior
do que 1 por causa da maneira como o operador lógico foi usada). Como todas as
coisas em VBScript, você pode fazê-lo ser tão complexa ou tão simples ,
dependendo das suas necessidades. Além do operador utilizado >
(maior que), a afirmação acima também usa um exemplo simples de controle de
fluxo. Desde a primeira linha é falsa, a instrução de "fluxo" na
segunda linha, que "controla" o comportamento das declarações. Agora,
vamos colocar isso junto em VBScript real:
1. x = True 'Atribuir
a variável x um valor verdadeiro
2. count = 0 ' atribuir a variável count um valor de 0
3.
4. Do 'loop externo
5. Do While cout < 10 'loop interno
6. count = count + 1 'incremento da contagem por um
7. Wscript.Echo count 'Exibição contagem atual na tela
8. If count = 10 Then 'se essa condição for verdadeira
9. x = False 'definir este valor para Falso
10. Exit Do 'sair do loop interno
11. End If 'fim da instrução If
12. Loop 'Primeira declaração de loop para o loop interior
13. Loop Until x = False 'sair do loop externo
2. count = 0 ' atribuir a variável count um valor de 0
3.
4. Do 'loop externo
5. Do While cout < 10 'loop interno
6. count = count + 1 'incremento da contagem por um
7. Wscript.Echo count 'Exibição contagem atual na tela
8. If count = 10 Then 'se essa condição for verdadeira
9. x = False 'definir este valor para Falso
10. Exit Do 'sair do loop interno
11. End If 'fim da instrução If
12. Loop 'Primeira declaração de loop para o loop interior
13. Loop Until x = False 'sair do loop externo
As linhas
foram numeradas, para facilidade de explicação. O sinal ’ (aspas
simples) é usado para especificar os comentários que são ignorados enquanto o
script é executado. Comentários foram adicionados à direita de cada linha para
explicar a funcionalidade. Ok, vamos analisar cada linha para poder entender o
que cada uma faz:
1. Atribuir a variável chamada
"x" um valor True (verdadeiro)
2. Atribuir a variável chamada
"count" o valor de 0.
3. Espaço inserido para separar as
instruções de declaração de variáveis da função de script. Simplesmente para
tornar o script mais fácil de ler e não é necessária.
4. Usou o laço "Do" para
iniciar um loop. Este tipo de loop (controle de fluxo) vai continuar até que
uma condição se torne verdadeira ou falsa dependendo do que for especificado.
5. Definir as restrições
condicionais da instrução loop. Faça o laço enquanto a variável count for
inferior a 10. Lembre-se, nós atribuímos
a variável COUNT um valor de 0.
6. Incrementando a variável count somando
mais um a cada passagem do loop. Considerando count = 0 na primeira passagem do
loop count será 0 +1 a variável count será então igual a 1, na segunda passagem
do loop count = 1 +1, na terceira passagem do loop count = 2 +1, e assim
sucessivamente.
7. Isso exibe o número de contagem
atual em uma janela pop-up na tela.
8. A instrução condicional. Se count
é igual a 10, fazer o que está na linha seguinte, caso contrário, vá para a
declaração LOOP e loop de volta para a declaração DO. Até que a variável de
contagem atenda a essa condição, a declaração vai continuar o loop.
9. Atribuir um novo valor à variável
X. Uma vez que a instrução condicional na linha 8 é cumprida, altere o valor de
X para FALSE.
10. Uma vez que a condição agora foi
cumprida, saímos do segundo, ou interior, loop.
11. Esta declaração é necessária para
mostrar o termino do circuito IF na linha 8. Isso é necessário para o script
saber onde e quando parar a declaração malha de controle de fluxo.
12. Esta é a declaração de fechamento
para o loop DO na linha 5. Também é necessário dizer que o script quando parar
o controle declaração ciclo de fluxo do loop Do interior.
13. Encerramento do Script. Uma vez
que a condição do loop DO for satisfeita. A variável count terá o valor de 10,
de modo que a variável X foi alterada para FALSE satisfaz os critérios dessa
condição, por conseguinte, o primeiro DO é fechado e o script é encerrado.
Arrays - A
função Array é usado para atribuir um conjunto de valores a uma variável. Quando
você precisa realizar tarefas administrativas várias vezes o Array oferece um
método para armazenar vários valores. O exemplo a seguir atribui três cores para
uma Array de variável com o nome Cores:
Cores = array
("vermelho", "verde", "azul")
Também é possível
criar uma Array de variável sem usar a instrução de função Array real
declarando a variável no início do seu script usando a declaração Dim. Declarar
uma variável simplesmente diz ao script que o nome que você está declarando
será usado como uma variável dentro do script. Por exemplo:
Dim Cores (2)
Esta
declaração informa ao script que estamos declarando uma variável cores nomeadas
como uma Array e que ele irá conter três valores. Sim, eu disse três valores. O
primeiro item em cada Array é realmente designado como item 0, o que deve ser
levado em consideração no cálculo do montante total de objetos na Array. Neste
caso, temos três cores para que a partir do zero contamos 0, 1, 2 ou
simplesmente subtrair um dos valores totais a serem utilizados. 3-1 = 2.
Continuando,
vamos agora atribuir valores a nossa Array de variável chamado Cores começando
com o item 0:
Dim Cores (2)
Cores (0) = "vermelho"
Cores (1) = "verde"
Cores (2) = "azul"
Cores (0) = "vermelho"
Cores (1) = "verde"
Cores (2) = "azul"
Nota - Se
você tentou atribuir uma quarta variável (Cores (3) = "branco"), sem aumentar as restrições do
array (Dim Cores (3)), o script retornaria um erro
dizendo: "Subscrito fora do intervalo".
Obviamente,
isso levaria um tempo para criar arrays maiores e o objetivo do script é
simplificar e automatizar suas tarefas de trabalho e agora vamos entender Arrays dinâmicas.
Arrays
dinâmicos são mais úteis que Arrays no fato de que eles não exigem que você
especifique o número de valores e o tamanho da Array pode mudar todo o script.
Este próximo script vai ler todos os computadores do domínio e escrever os
resultados para um arquivo de texto:
1. Dim Container
2. Dim ContainerName
3. Dim Computer
4. Dim fso
5. Dim outfile
6.
7. ContainerName = "INTRANET"
8. Set fso =
CreateObject("Scripting.FileSystemObject")
9. Set outfile =
fso.OpenTextFile("c:\DomainPC.txt", 2, True)
10. Set Container =
GetObject("WinNT://" & ContainerName)
11. Container.Filter =
Array("Computer")
12. For Each Computer In Container
13. outfile.writeline Computer.Name
14. Next
Como fizemos
anteriormente, vamos dividi-lo linha por linha e rever o script:
1. Declare a variável Container.
2. Declare a variável ContainerName.
3. Declare a variável Computer.
4. Declare a variável fso.
5. Declare a variável outfile.
6. Espaço para a separação de
declarações a partir da função script.
7. Atribuir o valor “intranet” (que
é o nome do domínio que está sendo consultado) para a variável ContainerName.
8. Use o método CreateObject para
vincular o objeto Scripting.FileSystemObject como um valor para a variável fso.
Isso significa que a variável fso agora é um objeto para uso dentro do script.
9. Use a propriedade OpenTextFile do
novo objeto FSO para criar um arquivo de texto no diretório C: \ chamado
DomainPC.txt e vinculá-lo à variável outfile. Quanto aos parâmetros no final da
declaração, o 2 significa que o arquivo pode ser substituído, e o True designa
um arquivo Unicode (false criaria um arquivo ASCII).
10. Use o método GetObject para
procurar no domínio “intranet” os
computadores com contas neste domínio e atribuí-los como valores para a
variável Container. Observação – o
parâmetro WinNT:// é sensível a maiúsculas e é usado tanto em dominios NT quanto
em domínios AD. Em domínios AD, é preferível usar o LDAP:/ / designação com o
caminho LDAP que vamos entrar em mais detalhes em um outro artigo.
11. Aqui é onde nós declaramos a Array
dinâmica. Agora usamos o método do filtro na variável Container para colocar o
produto na Array dinâmica que estamos nomeando como Computer.
12. A partir de um loop For ... Next
para controle de fluxo. Nesta linha, estamos dizendo que o script que cada
valor na Array variável Computer será atribuído como um valor na variável Container.
Nós não podemos simplesmente usar Container para outros métodos, uma vez que já
está em uso como uma variável na Array dinâmica por isso devemos criar e usar uma
outra variável. O loop iria ler como para cada computador na Array Container,
fazer o que se segue no roteiro até que o Next é atingido e não há mais valores
na Array Computer.
13. Use a propriedade WriteLine no
objeto outfile e imprimir a propriedade Nome do objeto Computer em cada linha.
14. Vá para o próximo computador na Array
Container até que todos os valores da Array foram escritos, em seguida, parar o
loop.
Final
Se você é iniciante
no mundo do VBScript, este é provavelmente um assunto um pouco difícil de
entender. A intenção deste artigo é apresentar os principais conceitos de
VBScript. Algumas partes do script faz sentido porque são lógicas e outras
partes são estranhas e confusas. A sintaxe da linguagem se tornará mais fácil
com a prática, portanto, não desanime. Tire algum tempo para analisar os
scripts e suas explicações e entender o que está ocorrendo em cada linha do
script. Eu garanto que qualquer administrador que escreve VBScript (e eu estou
incluído) tem um livro ou dois que lista todas as sintaxes e possíveis
parâmetros disponíveis em sua mesa para consulta. Um bom local para referência
é
http://www.devguru.com/Technologies/vbscript/quickref/vbscript_list.html.
Além disso,
dê uma olhada em alguns dos links abaixo para obter uma compreensão mais profunda
sobre VBScript:
http://msdn.microsoft.com/library/default.asp?url=/library/enus/script56/html/vsgrpFeatures.asp?frame=true
http://www.winguides.com/article.php?id=2
http://www.winnetmag.com/Articles/Index.cfm?ArticleID=3026
http://www.winnetmag.com/Articles/Index.cfm?ArticleID=5410
Há muitos,
muitos mais recursos na Internet, bem como livros disponíveis para mais
informações. Os links acima são apenas alguns locais de informação.
VBScript não
é algo fácil de entender para quem está iniciando, mas o pouco de trabalho
necessário para se familiarizar com ele vai lhe trazer bons resultados para
administração de seu ambiente.
Até o
próximo artigo.