quinta-feira, 11 de julho de 2013

VBScript para iniciantes


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

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

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

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

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"

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.