Você está na página 1de 37

Manual do VBScript

Este artigo derivado do System Administration Scripting Guide, um novo livro que
ser publicado como parte do Windows .NET Server Resource Kit.
Quando combinado a tecnologias como a instrumentao de gerenciamento do
Windows (WMI) e as interfaces de servio do Active Directory (ADSI), o Microsoft
Visual Basic Scripting Edition (VBScript) torna-se uma linguagem de scripts
poderosa. Usando o VBScript juntamente com essas tecnologias, voc pode escrever
um script de aproximadamente 10.000 linhas, um script completo com tratamento de
erros, sub-rotinas e outras construes de programao avanadas. Por sua vez, esse
script fornece a voc controle completo sobre todos os aspectos do seu ambiente de
computao.
No entanto, o que torna o VBScript uma ferramenta to til para administradores de
sistema o fato de que no preciso criar solues to elaboradas e complicadas.
Reconhecidamente, scripts podem ser usados para criar uma soluo de
gerenciamento empresarial abrangente. Porm, talvez o mais importante seja o fato
de que os scripts tambm podem ser usados do seguinte modo: um administrador do
sistema pode gastar alguns minutos digitando algumas linhas de cdigo no Bloco de
Notas e criar instantaneamente uma soluo personalizada para um problema
especfico.
Por exemplo, o script de trs linhas mostrado na listagem 1 pode ser executado
sempre que voc precisar saber a quantidade de espao livre em disco disponvel na
unidade C do seu computador.
Listagem 1 Recuperando espao livre em disco com o VBScript
1 Set objWmiService = GetObject("winmgmts:")
2 Set objLogicalDisk = objWmiService.Get("Win32_LogicalDisk.DeviceID='C:'")
3 WScript.Echo objLogicalDisk.FreeSpace
Se estiver enfrentado problemas com usurios que utilizam muito espao na unidade C
de seus computadores, agora voc tem uma soluo personalizada para identificar os
computadores com pouco espao livre em disco. Alm disso, voc pode desenvolver

essa soluo personalizada usando somente o Bloco de Notas e s precisar digitar as


trs linhas de cdigo j mencionadas.
claro que talvez esse script no atenda completamente s suas necessidades. Por
exemplo, o script s informa a respeito do espao livre em disco disponvel no seu
computador local; ele no pode informar a quantidade de espao livre disponvel em
um computador remoto. Da mesma forma, o script relata apenas o espao livre
disponvel na unidade C; ele no informa nada a respeito do espao livre disponvel
nas unidades D e E, por exemplo.
Porm, se o script no atender completamente s suas necessidades, ele poder ser
facilmente modificado, sem que seja preciso iniciar um novo script a partir do zero.
Essa outra vantagem do VBScript: possvel iniciar com um script muito simples e
adicionar recursos a ele medida que suas necessidades forem mudando e voc for se
tornando mais proficiente com a linguagem.
Conceitos bsicos do VBScript
Este artigo foi criado para ilustrar o processo de se comear com um script bsico e de
se adicionar, gradualmente, mais recursos sofisticados a ele. O artigo comea com o
script mostrado na listagem 1, um script que relata o espao livre em disco na unidade
C. Sees subseqentes usaro esse script simples de trs linhas e gradualmente
adicionaro mais recursos para torn-lo mais til em mais situaes. Quando essa
srie de aprimoramentos estiver completa, voc ter um script que pode:

Recuperar informaes sobre o espao livre em disco de qualquer computador


de sua empresa, inclusive computadores remotos.

Recuperar informaes sobre o espao livre em disco de vrios computadores.

Recuperar informaes sobre o espao livre em disco de todas as unidades


instaladas em um computador.

Emitir uma notificao somente se uma unidade tiver pouco espao em disco.

Continuar funcionando caso um usurio digite um nome de computador invlido


ou caso um computador no esteja disponvel na rede.

medida que os novos recursos forem adicionados ao script, as construes do


VBScript necessrias para fornecer esses aprimoramentos tambm sero brevemente

explicadas. (No captulo do System Administration Scripting Guide do qual esse


arquivo derivado, essas construes so explicadas em mais detalhes.)
Trabalhando com objetos
O VBScript permite a administradores do sistema criar scripts complexos usando
recursos de programao avanados, como rvores de deciso, loop, tratamento de
erros e a capacidade de chamar funes e sub-rotinas. Porm, o VBScript no inclui
funes intrnsecas execuo de tarefas de administrao de sistemas. O VBScript
possui funes internas para a determinao da raiz quadrada de um nmero ou do
valor ASCII de um caractere, mas no possui funes internas para a interrupo de
servios, para a recuperao de eventos em logs de eventos ou para a execuo de
outras tarefas do interesse de administradores de sistemas.
Usando objetos COM
Felizmente, h maneiras de se executar essas tarefas por meio de programao. Isso
feito basicamente atravs do uso de objetos de automao. Objetos de automao so
um subconjunto de COM (modelo de objeto componente), uma forma padro de
aplicativos (arquivos .exe) ou bibliotecas de programao (arquivos .dll) apresentarem
seus recursos como uma srie de objetos. Por sua vez, os programadores (ou
escritores de script) podem utilizar esses objetos -- e os recursos do aplicativo ou da
biblioteca de programao -- em seus prprios projetos. Por exemplo, um aplicativo de
processamento de texto pode expor o verificador ortogrfico como um objeto de
automao, fornecendo aos escritores de script uma maneira de adicionar a verificao
ortogrfica a seus projetos.
A capacidade de trabalhar com objetos de automao e utilizar as propriedades e os
mtodos desses objetos torna o VBScript uma ferramenta poderosa para administrao
de sistemas. O VBScript sozinho no pode ler eventos em um log; no entanto, ele pode
usar os recursos includos na WMI para recuperar esses eventos. O VBScript no
possui funes intrnsecas criao de contas de usurio no Active Directory; porm, a
linguagem pode usar os recursos da ADSI para criar essas contas. Na verdade, o
VBScript freqentemente chamado de "linguagem cola", pois uma de suas aplicaes
principais "colar" objetos. Em vez de fornecer um nmero infinito de funes
intrnsecas dedicadas administrao de sistemas, o VBScript fornece duas funes,

GetObject e CreateObject, e os elementos de linguagem necessrios para o uso dos


mtodos e das propriedades de objetos de automao.
O script mostrado na listagem 2 ilustra a importncia de objetos de automao no
VBScript. Esse script relata a quantidade de espao livre em disco na unidade C do
computador local. E, ainda, ele faz isso usando pouco cdigo VBScript. Em vez disso, o
script:
1. Usa a funo VBScript GetObject para se conectar WMI atravs da biblioteca
de scripts WMI (um objeto de automao).
2. Usa o mtodo Get, fornecido pelo objeto de automao WMI, para recuperar as
propriedades da unidade C.
3. Usa o mtodo Echo do Windows Script Host (WSH) para relatar a quantidade de
espao livre em disco na unidade C. Alis, WSH apenas outro objeto de
automao.
Listagem 2 Usando objetos no VBScript
1 Set objWmiService = GetObject("winmgmts:")
2 Set objLogicalDisk = objWmiService.Get("Win32_LogicalDisk.DeviceID='C:'")
3 WScript.Echo objLogicalDisk.FreeSpace
No exemplo anterior, o objetivo principal do VBScript era colar os recursos da WMI e
do WSH. Isso permitiu a voc recuperar o espao livre em disco (algo que o WSH no
pode fazer sozinho) e exibir o valor de volta para a tela (algo que a WMI no pode
fazer sozinha).
Criando objetos
Antes de utilizar os mtodos ou as propriedades de um objeto de automao, voc
deve obter uma referncia ao objeto, um processo conhecido como criar ou determinar
o objeto.
Criar objetos pode parecer confuso primeira vista, pois o VBScript e o WSH fornecem
os mtodos CreateObject e GetObject para acessar objetos. Alm disso, embora as
implementaes sejam semelhantes, h algumas diferenas sutis que crescem em
importncia medida que voc se torna proficiente em scripts. Essas diferenas so
discutidas em mais detalhes no livro. Por enquanto, use as seguintes diretrizes prticas
sem se preocupar com o fato de estar usando as funes do VBScript ou os mtodos
do WSH (porm, na maioria dos casos, voc usar as funes do VBScript):

Use GetObject para criar objetos WMI ou ADSI. Quando estiver utilizando
GetObject, use um identificador de origem para identificar o objeto a ser criado.
Um identificador de origem simplesmente uma seqncia de caracteres, com
um prefixo obrigatrio, que facilita a descrio do objeto de destino, da mesma
forma como um nome de arquivo e um caminho completo descrevem um
arquivo especfico no sistema de arquivos.

Use CreateObject para criar objetos que no sejam WMI ou ADSI.


CreateObject usa um identificador por meio de programao, ProgID, para
identificar o objeto a ser criado. Um ProgID a seqncia de caracteres fixa
que um objeto adiciona ao Registro quando o objeto instalado e registrado no
computador. Prefixos de identificador de origem tambm so armazenados no
Registro.

Estas no so regras fixas; algumas vezes voc precisar usar CreateObject para criar
objetos WMI que no sejam SWbemServices (por exemplo, SWbemDateTime). Alguns
objetos ADSI exigem, de forma semelhante, o uso de CreateObject. Porm, em geral,
CreateObject ser necessrio somente durante a criao de novas instncias de itens
como objetos de shell, de rede e de controlador do WSH, objetos de dicionrio,
FileSystemObject e o Internet Explorer, entre vrios outros objetos.
Objetos intrnsecos
Alguns objetos so intrnsecos. Objetos intrnsecos so os objetos criados sem nunca
ter sido necessrio efetuar uma chamada para GetObject ou CreateObject. No script
mostrado na listagem 2, o script conecta-se WMI usando este cdigo:
Set objWmiService = GetObject("winmgmts:")
Isso cria uma referncia, chamada objWmiService, ao objeto SwbemServices da
biblioteca de scripts WMI.
Observe que nenhuma seqncia de caracteres semelhante usada para criar uma
referncia ao objeto Wscript do WSH na listagem 2. Em vez disso, o mtodo Echo
chamado sem a criao anterior de qualquer tipo de objeto WSH. Isso ocorre porque
WScript um objeto intrnseco. No necessrio criar um objeto Wscript, pois WScript
ser criado automaticamente quando voc executar um script de VBScript. O objeto de
erro do VBScript, Err, outro objeto intrnseco. O objeto Err ser criado
automaticamente quando ocorrer um erro no script. Examinaremos o objeto Err
posteriormente neste artigo.
Usando uma referncia de objeto

Com a automao, voc no trabalha diretamente com o prprio objeto. Em vez disso,
voc cria uma referncia ao objeto usando GetObject ou CreateObject e atribuindo o
objeto a uma varivel. Aps a criao dessa referncia, voc poder acessar os
mtodos e as propriedades do objeto usando a varivel e no o objeto propriamente
dito. Na listagem 2, GetObject usado para atribuir o objeto SWbemServices da WMI
varivel objWmiService. Depois que a atribuio for concluda, todos os mtodos e as
propriedades do objeto SWbemServices podero ser acessados atravs de
objWmiService. Por exemplo, na linha 2 do script, o mtodo Get usado para
recuperar as propriedades da unidade C.
Sempre que criar uma referncia de objeto, voc dever usar a palavra-chave Set
quando atribuir a referncia a uma varivel. Por exemplo, esta linha de cdigo
resultar em erro em tempo de execuo:
objWmiService = GetObject("winmgmts:")
Para criar a referncia do objeto, use a palavra-chave Set da seguinte maneira:
Set objWmiService = GetObject("winmgmts:")
Set s usada durante a criao de uma referncia de objeto. Se voc usar essa
palavra-chave para outros propsitos, como atribuir um valor a uma varivel, ocorrer
um erro em tempo de execuo. Por exemplo, esta linha de cdigo falhar, pois
nenhum objeto chamado y poder ser encontrado no computador:
Set x = y
Mtodos de chamada
Os objetos de automao permitem usar os recursos dos objetos nos scripts. Por sua
vez, isso permite a voc criar scripts mais teis e poderosos do que faria se estivesse
restrito aos recursos da linguagem de scripts. Por exemplo, impossvel desenhar um
grfico usando somente o VBScript. No entanto, com a automao, voc pode utilizar
os recursos do Microsoft Excel e adicionar facilmente um grfico a, por exemplo, uma
pgina da Web.
Normalmente, os objetos de automao expem mtodos e propriedades (porm, no
h requisitos para que exponham nenhum dos dois). Os mtodos so equivalentes s
aes que os objetos podem executar. Por exemplo, embora o script da listagem 2
tenha somente trs linhas, ele usa a automao para acessar os mtodos de dois
objetos COM diferentes e, assim, executar duas aes distintas:

O mtodo Get, disponvel atravs do objeto SWbemServices da WMI. O mtodo


Get recupera informaes do recurso gerenciado pela WMI especificado.

O mtodo Echo, disponvel atravs do objeto WScript. O mtodo Echo exibe


informaes na tela. Se um script estiver sendo executado em uma janela de
prompt de comando e, portanto, sob Cscript.exe, essa informao ser exibida
dentro dessa janela. Se o script estiver sendo executado sob Wscript.exe, a
informao ser exibida em uma caixa de dilogo.

Depois de criar uma referncia a um objeto, voc poder chamar os mtodos desse
objeto usando a notao de pontos. A notao de pontos tem esse nome, pois voc
chama um mtodo digitando o nome da varivel que faz referncia ao objeto, um
ponto e o nome do mtodo (dependendo do mtodo, voc tambm poder digitar seus
parmetros). Geralmente, a notao de pontos tem a seguinte aparncia:
Referncia_de_Objeto.Nome_do_Mtodo
Na listagem 2, a chamada do mtodo Get de SWbemServices pode ser dividida
conforme mostrado na tabela 1.
Tabela 1
Item

Descrio

objWmiService

Referncia do objeto.

Ponto (separa a referncia do objeto e o nome do


mtodo).

Get

Nome do mtodo.

("Win32_LogicalDisk.DeviceID='C:'") Parmetro do mtodo. Para o mtodo Get, isso


pode ser lido como "Obtenha a instncia da classe
Win32_LogicalDisk onde DeviceID igual a C:".
Uma observao sobre Wscript.Echo
Em vez de usar Wscript.Echo para exibir o espao livre em disco, voc pode usar a
funo Msgbox do VBScript:
Msgbox objLogicalDisk.FreeSpace
Porm, neste artigo, usaremos Wscript.Echo e no Msgbox. Isso ser feito porque a
funo Msgbox sempre exibe as informaes em uma caixa de dilogo grfica. Quando
essa caixa de dilogo for exibida, voc dever clicar no boto OK antes que o script
prossiga.

Recuperando propriedades
Propriedades so atributos associados a um objeto. Elas so especialmente
importantes em scripts de administrao de sistemas, pois vrios dos objetos que voc
usa so representaes virtuais de objetos reais de sistema operacional e de
computador. Na listagem 2, a propriedade FreeSpace recuperada com a mesma
notao de pontos usada para chamar mtodos.
Isso pode parecer irrelevante, mas com a WMI, a referncia no algum algoritmo de
programao amorfo, mas sim a um disco rgido real no computador. Portanto, a
propriedade FreeSpace no somente uma propriedade de um objeto de automao;
ela uma propriedade da unidade C. De certa maneira, WMI cria um espelho virtual de
um objeto fsico real. Quando voc recupera as propriedades desse espelho virtual,
tambm recupera as propriedades do objeto fsico.
Variveis
O script mostrado na listagem 2 funciona exatamente como o esperado; quando
executado, ele relata o espao livre em disco na unidade C. Porm, isso no significa
que o script no possa ser aprimorado. Por exemplo, a propriedade FreeSpace informa
o nmero de bytes disponveis em uma unidade. Como unidades de disco so
normalmente medidas em gigabytes, quase sempre a propriedade FreeSpace retorna
um valor difcil de interpretar. Por exemplo, a figura 1 mostra o valor relatado para
uma unidade com aproximadamente 10 gigabytes de espao livre em disco.

Figura 1
Embora parea bvio que a unidade C possui espao em disco adequado, muito
menos bvio a quantidade de espao em disco realmente disponvel. Administradores
de sistema podem achar fcil interpretar os dados retornados pelo script, caso os
dados sejam relatados como megabytes em vez de bytes.
O VBScript inclui uma grande variedade de funes matemticas que permitem
executar aes, como a converso de bytes em megabytes. Alm disso, o VBScript
tambm fornece uma construo -- a varivel -- que pode ser usada para armazenar
os resultados dessas equaes matemticas. Variveis fornecem uma maneira de
armazenar qualquer tipo de dado enquanto o script est sendo executado.

Variveis representam partes da memria disponveis ao script durante sua execuo.


Com essa finalidade, voc pode pensar em memria de computador como sendo uma
srie de pequenos compartimentos. Uma varivel nada mais do que um desses
compartimentos com um rtulo identificador anexado. Voc pode armazenar qualquer
tipo de dado nesse compartimento e ter certeza de que o VBScript poder recuperar os
dados se necessrio. Quando voc desejar fazer referncia a esses dados, o VBScript
simplesmente procurar o endereo da memria e relatar as informaes l
armazenadas.
Usando variveis
Como outras linguagens de script comuns, as variveis do VBScript podem ser criadas
e usadas imediatamente em qualquer ponto de um script. Voc no precisa se
preocupar em declarar ou inicializar uma varivel antes de us-la. (Por outro lado, h
algumas vantagens em declarar e inicializar variveis antes de us-las. Para obter
detalhes, consulte o System Administration Scripting Guide.)
Na linha 3 da listagem 3, uma varivel chamada FreeMegabytes usada para
armazenar os resultados da diviso de FreeSpace por 1048576 (o valor necessrio
para converter bytes em megabytes). Assim que a linha 3 for executada, a varivel
FreeMegabytes assumir o valor dessa equao. Se for necessrio fazer referncia ao
nmero de megabytes de espao livre em disco em qualquer outro local do script, voc
no precisar repetir essa equao. Em vez disso, simplesmente faa referncia
varivel FreeMegabytes. Isso mostrado na linha 4, onde o valor da varivel exibido
para a tela.
Listagem 3 Usando variveis
1 Set objWmiService = GetObject("winmgmts:")
2 Set objLogicalDisk = objWmiService.Get("Win32_LogicalDisk.DeviceID='C:'")
3 FreeMegaBytes = objLogicalDisk.FreeSpace / 1048576
4 WScript.Echo FreeMegaBytes
A Figura 2 mostra o valor relatado como megabytes.

Figura 2
Observao A equao usou o nmero 1048576 e no o nmero 1.048.576 (com
pontos para separar os milhares). Voc no pode usar pontos ou qualquer outro
caractere para separar milhares no VBScript. Em vez disso, voc deve executar todos
os dgitos juntos. Isso se aplica a nmeros embutidos em cdigo no script, bem como

nmeros inseridos como um argumento de linha de comando ou como resposta a


qualquer tipo de solicitao.
Modificando variveis
Provavelmente, o valor 10340.4458007813 (significando 10.340 megabytes de espao
livre) muito mais significativo para o administrador de sistema tpico do que o valor
10842824704. Porm, pode-se argumentar que os nmeros aps o ponto decimal no
contm muitas informaes teis. Felizmente, o VBScript fornece vrias maneiras
diferentes para voc modificar os dados armazenados em variveis. Por exemplo, a
funo Int retorna a parte inteira de um nmero, deixando de fora todos os dgitos
aps o ponto decimal. Portanto, voc pode usar a funo Int para modificar o valor
decimal armazenado no compartimento FreeMegaBytes, conforme mostrado na linha 4
da listagem 4.
Listagem 4 Modificando variveis
1 Set objWmiService = GetObject("winmgmts:")
2 Set objLogicalDisk = objWmiService.Get("Win32_LogicalDisk.DeviceID='C:'")
3 FreeMegaBytes = objLogicalDisk.FreeSpace / 1048576
4 FreeMegaBytes = Int(FreeMegaBytes)
5 WScript.Echo FreeMegaBytes
A funo Int recupera o valor decimal original, descarta todos os dgitos aps o ponto
decimal e retorna somente a parte inteira arredondada do nmero, que sobrescreve o
valor original armazenado no compartimento FreeMegaBytes (varivel). Quando o
script da listagem 4 for executado, FreeMegaBytes ser relatado como um nmero
inteiro, conforme mostrado na figura 3.

Figura 3
Constantes
No script mostrado na listagem 3, a quantidade de megabytes livres calculada
atravs da diviso do valor da propriedade FreeSpace pelo valor embutido em cdigo
1048576 (valores embutidos em cdigo como esse so chamados de literais, pois
representam literalmente o valor e no variveis).
Em um script pequeno como esse (especialmente, um script pequeno escrito para seu
prprio uso), valores literais embutidos em cdigo no apresentam problemas. Porm,

talvez seja necessrio um script maior, especialmente um script usado na configurao


de empresas. Nessas situaes, literais podem resultar em, pelo menos, dois
problemas:

Confuso. Em um script pequeno, pode estar evidente que 1048576 o valor


necessrio para converter bytes (o valor retornado da propriedade FreeSpace)
em megabytes. Em um script maior, que inclua vrias equaes matemticas,
isso pode no estar to evidente. Esse problema ocorre principalmente em
configuraes de empresas, onde vrios administradores podem usar -- e
modificar -- o mesmo script. Embora seja fcil para voc saber o que 1048576
representa, talvez no seja to evidente para outro administrador encarregado
de modificar o script.

Mais trabalho e mais risco de erro. Se voc tem certeza de que seu script
nunca ser alterado, talvez no seja relevante que o uso de literais possa ser
confuso. Porm, se houver possibilidade de alterao no script, os valores
literais no s sero confusos, como tambm exigiro mais trabalho para a
pessoa que estiver modificando o script. Por exemplo, considere que esse
mesmo procedimento -- converter quilobytes em megabytes -- seja usado 5 ou
6 vezes em um script. Se mais tarde voc decidir converter o valor em
gigabytes em vez de megabytes, voc ter de modificar corretamente cada
linha de cdigo em que ocorrer a converso. Se no fizer isso, o script no
fornecer resultados precisos.

Uma maneira de evitar os problemas que podem surgir devido ao uso de literais
utilizar constantes. Constantes so similares a variveis, pois ambas so locais para
armazenar dados. Porm, ao contrrio das variveis, as constantes, depois que so
definidas (isto , depois que um valor atribudo a elas), no podem ser modificadas
durante a execuo do script. Ao atribuir itens importantes, como o valor necessrio
para converter bytes em megabytes, a uma constante, voc pode garantir que o valor
permanecer o mesmo: um valor de constante no pode ser alterado, nem
inadvertidamente nem de qualquer outra forma.
Na listagem 5, uma constante chamada CONVERSION_FACTOR definida na linha 1 e
o valor 1048576 atribudo a ela. Posteriormente no script (linha 4), o nmero de
bytes de espao livre em disco convertido no nmero de megabytes de espao livre
em disco. Em vez de usar o valor literal 1048576, a constante CONVERSION_FACTOR

utilizada. Ambas as equaes retornam o mesmo resultado; porm, mais fcil ler e
compreender a equao da listagem 5.
Listagem 5 Usando constantes
1 Const CONVERSION_FACTOR = 1048576
2 Set objWmiService = GetObject("winmgmts:")
3 Set objLogicalDisk = objWmiService.Get("Win32_LogicalDisk.DeviceID='C:'")
4 FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR
5 FreeMegaBytes = Int(FreeMegaBytes)
6 WScript.Echo FreeMegaBytes
Outro benefcio da utilizao de constantes que elas podem ser definidas uma vez e
usadas vrias vezes no mesmo script. Por exemplo, uma verso expandida do script
mostrado na listagem 5 pode exigir que voc converta bytes em megabytes vrias
vezes durante a execuo do script. Em vez de usar o valor literal em cada equao,
use a constante. Se mais tarde voc decidir converter bytes em gigabytes, precisar
somente alterar o valor da constante; no ser necessrio alterar o valor usado em
cada equao.
Seqncias de caracteres
medida que voc escreve scripts cada vez mais sofisticados, comea a encontrar
tipos diferentes de dados (esse tpico abordado em mais detalhes no livro). Na
listagem 5, por exemplo, voc precisou usar dados numricos para atribuir o valor
literal 1048576 constante CONVERSION_FACTOR:
Const CONVERSION_FACTOR = 1048576
Essa linha de cdigo ser executada corretamente, pois um valor numrico est sendo
atribudo constante. Sempre que voc atribuir um valor numrico a uma varivel ou
a uma constante, digite o sinal de igual seguido do valor.
No entanto, resultados inesperados podero ocorrer se voc tentar atribuir um valor
alfanumrico (geralmente chamado de valor de seqncia de caracteres) usando a
mesma abordagem. Por exemplo, o cdigo a seguir tenta atribuir a seqncia de
caracteres atl-dc-01 varivel Computer e, em seguida, exibir o valor da varivel:
Computer = atl-dc-01
Wscript.Echo Computer
Quando esse script for executado, o valor mostrado na figura 4 ser exibido.

Figura 4

Como o valor -1 foi atribudo varivel Computer? Quando o VBScript encontra um


conjunto de caracteres alfanumricos que no est entre aspas duplas, ele pressupe
que os caracteres representam o nome de uma varivel. Se ele vir um hfen "perdido",
presumir que representa um sinal de menos. Como resultado, ele interpretar a linha
Computer = atl-dc-01 como varivel Computer ser atribudo:

O valor da varivel atl

Menos o valor da varivel dc

Menos o valor 01

Como atl e dc so exibidas como novas variveis que no foram inicializadas, o valor 0
ser atribudo a elas. Dessa forma, o VBScript interpretar essa linha de cdigo como
se estivesse escrita assim:
Computer = 0 - 0 - 1
Por isso a atribuio errnea de -1.
Quando voc atribui um valor de seqncia de caracteres a uma varivel ou a uma
constante, deve coloc-lo entre aspas duplas; essa a nica forma de assegurar que o
VBScript tratar a seqncia de caracteres como um valor alfanumrico e no como
uma varivel. Por exemplo, esse cdigo atribui corretamente a seqncia de caracteres
atl-dc-01 varivel Computer e, em seguida, exibe os resultados:
Computer = "atl-dc-01"
Wscript.Echo Computer
Quando esse script for executado, a seqncia de caracteres mostrada na figura 5 ser
exibida.

Figura 5
Seqncias de caracteres como variveis
Freqentemente, as seqncias de caracteres so usadas para atribuir valores a
variveis. Por exemplo, os scripts usados at agora neste captulo empregam o
seguinte cdigo para conectarem-se WMI:
Set objWmiService = GetObject("winmgmts:")
Sem explicar todos os detalhes da conexo com a WMI (para obter essas informaes,
consulte o captulo sobre a WMI no livro), esse cdigo sempre conecta voc ao
computador local. Isso suficiente, a menos que voc seja um administrador de

sistema responsvel pelo gerenciamento de alguns computadores remotos. Nesse


caso, aconselhvel usar um script que possa recuperar o espao livre em disco de
um computador remoto. Isso permitir a voc verificar, a partir da sua estao de
trabalho, o espao em disco disponvel em qualquer computador sob o seu controle.
Com a WMI, possvel conectar-se a um computador remoto simplesmente incluindo o
nome do computador como parte do identificador de origem GetObject. Por exemplo,
esta linha de cdigo conecta voc ao servio WMI no computador remoto atl-dc-01:
Set objWmiService = GetObject("winmgmts://atl-dc-01")
Voc pode usar o cdigo precedente para escrever um script que faa a conexo com o
computador remoto. Porm, em uma configurao de empresa, talvez voc deseje um
script mais flexvel que possa conectar-se a qualquer computador remoto. Para isso,
edite o script sempre que execut-lo, substituindo o nome embutido em cdigo do
computador pelo nome embutido em cdigo do computador de destino. Uma
alternativa ainda melhor fornecer alguma maneira para o script aceitar entradas
quando estiver sendo executado e assim operar, por exemplo, em um computador
inserido como um argumento de linha de comando.
A entrada do usurio ser discutida posteriormente neste artigo. No entanto, antes de
comear essa discusso, importante compreender como os valores de seqncia de
caracteres (como nomes de computador) podem ser atribudos a uma varivel e, em
seguida, utilizados como parte do cdigo de script.
Por exemplo, na linha 2 da listagem 6, o valor da seqncia de caracteres atl-dc-01
atribudo varivel Computer. Na linha 3, essa varivel usada para fazer a conexo
com o servio WMI no computador atl-dc-01. Porm, isso no feito embutindo-se em
cdigo o valor atl-dc-01 no identificador de registro, mas sim atravs do valor da
varivel Computer.
Listagem 6 Usando seqncias de caracteres
1 Const CONVERSION_FACTOR = 1048576
2 Computer = "atl-dc-01"
3 Set objWmiService = GetObject("winmgmts://" & Computer)
4 Set objLogicalDisk = objWmiService.Get("Win32_LogicalDisk.DeviceID='C:'")
5 FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR
6 FreeMegaBytes = Int(FreeMegaBytes)
7 WScript.Echo FreeMegaBytes
Em um pequeno script de demonstrao como esse, usar uma varivel para o nome do
computador provavelmente exige mais esforo do que embutir o valor em cdigo.
Porm, esse script ilustra um conceito importante: voc pode atribuir um valor a uma

varivel e us-la no lugar de um valor embutido em cdigo. Por que isso importante?
Imagine que esse script foi criado para recuperar espao livre em disco de 100
computadores. Em vez de embutir em cdigo seqncias de caracteres separadas do
identificador de registro da WMI em cada computador, possvel criar uma nica
seqncia de caracteres com a varivel Computer. Em seguida, o script poder
executar essa nica seqncia de caracteres 100 vezes, a cada vez substituindo o
valor de Computer por um nome de computador diferente.
Porm, no momento, voc s precisa se concentrar na linha 3:
Set objWmiService = GetObject("winmgmts://" & Computer)
desta forma que o VBScript interpreta essa linha de cdigo:
1. O VBscript l tudo at a segunda aspa dupla. Em outras palavras:
Set objWmiService = GetObject("winmgmts://"
2. Ele l o E comercial, que significa basicamente "acrescentar o prximo item
seqncia de caracteres precedente". O que vem depois do E comercial a
varivel Computer, qual foi atribuda o valor atl-dc-01. O VBScript v a linha
da seguinte forma:
Set objWmiService = GetObject("winmgmts://atl-dc-01"
3. Ele l o caractere de parntese de fechamento. O VBScript exige que voc
tenha um nmero igual de parnteses de abertura e de fechamento. Se o
parntese de fechamento no estiver includo, voc receber uma mensagem
de erro. Agora, o VBScript l a linha de cdigo como
Set objWmiService = GetObject("winmgmts://atl-dc-01")
4. Aps chegar ao final da linha, o VBScript executa a instruo. Por sua vez, o
script se conecta ao servio WMI em atl-dc-01. Para conectar-se ao servio WMI
em um computador diferente, voc s precisa alterar o valor da varivel
Computer.
Concatenando seqncias de caracteres
Concatenao refere-se ao processo de combinar duas ou mais seqncias de
caracteres em uma nica seqncia de caracteres (tambm possvel combin-las

com valores numricos ou de datas). A concatenao usada com freqncia para


fornecer sada mais significativa e legvel. Por exemplo, o script mostrado na listagem
4 retorna um valor como 10340. Essa informao bastante til, desde que voc
tenha certeza de que o script foi desenvolvido para retornar o nmero de megabytes
de espao livre em disco da unidade C. Caso voc no conhea a funo do script, a
sada ser sem sentido.
Entre outras funes, a concatenao ajuda a fornecer contexto para sua sada de
script. Por exemplo, em vez de exibir o valor 10340, aconselhvel exibir uma
mensagem similar a "H 10340 megabytes de espao livre em disco". Para fazer isso,
voc pode combinar os trs itens a seguir:

"H ", uma seqncia de caracteres simples representando o incio da


mensagem.

FreeMegaBytes, a varivel contendo o nmero de megabytes livres na unidade.

" megabytes de espao livre em disco.", uma segunda seqncia de caracteres


representando o final da mensagem.

Conforme mostrado nas linhas 3, 7 e 8 da listagem 7, voc concatena itens no


VBScript usando o E comercial (&).
Listagem 7 Concatenando seqncias de caracteres
1 Const CONVERSION_FACTOR = 1048576
2 Computer = "atl-dc-01"
3 Set objWmiService = GetObject("winmgmts://" & Computer)
4 Set objLogicalDisk = objWmiService.Get("Win32_LogicalDisk.DeviceID='C:'")
5 FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR
6 FreeMegaBytes = Int(FreeMegaBytes)
7 WScript.Echo "H " & FreeMegaBytes & _
8 " megabytes de espao livre em disco."
Observao O sublinhado (_) no final da linha 7 conhecido como o caractere de
continuao de linha e usado para indicar uma quebra na instruo. Isso significa
que as linhas 7 e 8 devem ser tratadas como uma nica linha. Por ser muito grande
para caber no espao reservado, a linha foi quebrada. As quebras de instruo so
abordadas em mais detalhes no livro.
Como alternativa, voc pode ter atribudo o valor "H " a uma varivel chamada
MessageStart e a seqncia de caracteres " megabytes de espao livre em disco." a

uma varivel chamada MessageEnd. Em seguida, voc pode ter concatenado as trs
variveis da seguinte maneira:
Wscript.Echo MessageStart & FreeMegaBytes & MessageEnd
Se voc observar as linhas 7 e 8, perceber que os espaos em branco foram
embutidos em cdigo nos valores da seqncia de caracteres "H " e " megabytes de
espao livre em disco.". Isso necessrio, pois o E comercial no insere espaos entre
os itens sendo concatenados. Por exemplo, exclua os espaos em branco, desta forma:
WScript.Echo "H" & FreeMegaBytes & "megabytes de espao livre em disco."
Nesse caso, a mensagem resultante executar os trs valores juntos, conforme
mostrado na figura 6.

Figura 6
Para formas simples de concatenao, voc pode evitar esse problema usando uma
vrgula em vez do E comercial para combinar os valores:
WScript.Echo "H", FreeMegaBytes, "megabytes de espao livre em disco."
Quando itens so separados por vrgula, um espao em branco inserido
automaticamente entre eles. Como resultado, a mensagem formatada de maneira
apropriada, conforme mostrado na figura 7.

Figura 7
Colees
At este ponto do artigo, os scripts foram criados para recuperar o espao livre na
unidade C de um computador especificado. Determinar o espao livre em uma nica
unidade uma tarefa administrativa comum, especialmente quando voc est
trabalhando com estaes de trabalho de usurios que possuem somente uma
unidade. Como a inteno era recuperar apenas o espao livre em disco da unidade C,
o DeviceID foi embutido em cdigo no script.
claro que, provavelmente, outros computadores -- incluindo a maioria dos servidores
-- possuem vrias unidades. Para esses computadores, a determinao do espao livre
na unidade C no informao suficiente; como administrador do sistema, voc
tambm precisa conhecer o espao livre da unidade D, da unidade E e das outras
unidades instaladas no computador. (Na verdade, a classe Win32_LogicalDisk pode
identificar e retornar as propriedades de todos os tipos de unidade, incluindo
disquetes, CD-ROMs e unidades de rede mapeadas.)

Porm, isso apresenta um problema imediato: como saber quais unidades esto
instaladas em um determinado computador? Teoricamente, voc pode verificar o
espao livre das unidades C a Z, mas, se um computador no possuir, por exemplo,
uma unidade E, o script falhar. Embora seja possvel incluir um cdigo criado para
tratar esses erros e impedir que o script falhe, o script resultante seria muito longo,
dificultando a sua leitura e a sua manuteno. Esse script especfico tambm seria
muito ineficiente; mesmo que um computador tivesse somente uma unidade, o script
tentaria recuperar o espao livre nas unidades D a Z inexistentes.
Felizmente, objetos de automao quase sempre retornam informaes na forma de
colees. Como colees de selos ou de moedas, essas colees de automao so
simples grupos de itens relacionados. Por exemplo, o script da listagem 8 usa o
mtodo InstancesOf da WMI (linha 4) para retornar no apenas uma unidade
especfica, mas uma coleo consistindo em todos os discos lgicos instalados no
computador. Se o computador tiver quatro unidades (C, D, E e F), a coleo ter
quatro itens, um para cada unidade.
Listagem 8 Usando colees
1 Const CONVERSION_FACTOR = 1048576
2 Computer = "atl-dc-01"
3 Set objWmiService = GetObject("winmgmts://" & Computer)
4 Set colLogicalDisks = objWmiService.InstancesOf("Win32_LogicalDisk")
5 For Each objLogicalDisk In colLogicalDisks
6 FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR
7 FreeMegaBytes = Int(FreeMegaBytes)
8 WScript.Echo objLogicalDisk.DeviceID & " " & FreeMegaBytes
9 Next
Obter informaes retornadas como uma coleo significa que voc no precisa
antecipar quais unidades esto instaladas ou no em um computador. Em vez disso,
simplesmente pergunte pela coleo (todas as instncias de unidades de disco
instaladas no computador). Depois que a coleo tiver sido retornada, voc poder
usar um loop For Each (tambm conhecido como um loop de iterao) para examinar
cada item individual da coleo.
For Each
A instruo For Each fornece uma maneira simples de iterar todos os itens em uma
coleo (ou em uma matriz). Ao contrrio da instruo For (que ser abordada

posteriormente), For Each no exige que voc saiba quantos itens existem na coleo.
Em vez disso, ela inicia com o primeiro item da coleo (ou matriz) e continua at que
tenha efetuado um loop em cada item.
Um loop For Each tpico tem a seguinte aparncia:
For Each objLogicalDisk In colLogicalDisks
WScript.Echo objLogicalDisk.DeviceID
Next
Os itens individuais que compem esse loop so descritos na tabela 2.
Tabela 2
Item

Descrio

objLogicalDisk

Varivel que representa as instncias de unidade de


disco individuais.

colLogicalDisks

Nome dado coleo de unidades de disco recuperada


com a WMI.

For Each objLogicalDisk in

Inicia o loop. A sintaxe bsica pode ser lida como

colLogicalDisks

Instncia For Each de um objeto em uma coleo de


objetos executa uma ao. Neste exemplo, isso pode
ser lido como "Para cada unidade de disco individual
na coleo de unidades de disco instalada neste
computador "

Wscript.Echo

Instrues executadas para cada unidade de disco na

objLogicalDisk.DeviceID

coleo (neste exemplo, h somente uma instruo,


mas pode haver vrias instrues entre as instrues
For Each e Next).
Observe que a referncia a unidades de disco
individuais feita com a varivel objLogicalDisk e com
a propriedade adequada (neste caso, DeviceID). O
valor dessa propriedade ser alterado todas as vezes
atravs do loop. Por exemplo, em um computador
com unidades C, D e E, objLogicalDisk.DeviceID ser
igual a C na primeira iterao, pois C o DeviceID da
primeira unidade da coleo. Em passagens
subseqentes atravs do loop,
objLogicalDisk.DeviceID ser igual a D e, em seguida,
a E.

Next

Indica o final do loop. Depois de iterar cada item da


coleo, o script prosseguir na linha aps a instruo
Next. Se no houver linhas aps essa instruo, o
script ser finalizado.

Colees sem itens


possvel que uma coleo no contenha itens. Por exemplo, considere este script,
que retorna o conjunto de todas as unidades de fita instaladas em um computador:
Set objWmiService = GetObject("winmgmts:")
Set colTapeDrives = objWmiService.InstancesOf("Win32_TapeDrive")
For Each objTapeDrive In colTapeDrives
WScript.Echo objTapeDrive.Name
Next
Se esse script for executado em um computador sem unidades de fita, parecer que
nada aconteceu. Na verdade, o script ser executado conforme o esperado. Porm,
como o computador no possui uma unidade de fita, a coleo resultante de todas as
unidades de fita instaladas no computador no conter itens. Quando executado em
um computador sem unidades de fita, o script ir:
1. Conectar-se ao servio WMI.
2. Recuperar a coleo de unidades de fita instalada no computador.
3. Configurar um loop For Each para percorrer toda a coleo, exibindo o nome de
cada unidade de fita individual da coleo. Porm, como no h itens na
coleo, o loop For Each e as instrues nele includas no sero de fato
executados. Em vez disso, o loop For Each ser ignorado e o script ir para a
primeira linha aps a instruo Next. Nesse script de exemplo, no h linhas de
cdigo aps a instruo Next, logo, o script finalizado.
Infelizmente, isso pode ser confuso: no existe maneira bvia de saber se o script foi
executado ou no. Uma forma de aprimorar esse script usar a propriedade Count
para determinar a quantidade de itens na coleo. Por exemplo, esse script usa a
propriedade Count para exibir o nmero de unidades de fita instaladas em um
computador:

Set objWmiService = GetObject("winmgmts:")


Set colTapeDrives = objWmiService.InstancesOf("Win32_TapeDrive")
Wscript.Echo colTapeDrives.Count
O seu script pode usar a propriedade Count para determinar o nmero de itens da
coleo e executar uma das seguintes opes:

Exibir as propriedades do item, caso haja um ou mais itens na coleo.

Exibir uma mensagem como "No h unidades de fita instaladas neste


computador.", caso a coleo no contenha itens.

O script poder ter esta aparncia (o uso da instruo If-Then-Else ser explicado
posteriormente neste artigo):
Set objWmiService = GetObject("winmgmts:")
Set colTapeDrives = objWmiService.InstancesOf("Win32_TapeDrive")
If colTapeDrives.Count = 0 Then
Wscript.Echo "No h unidades de fita instaladas neste computador."
Else
For Each objTapeDrive In colTapeDrives
WScript.Echo objTapeDrive.Name
Next
End If
Loop
Voc j viu uma forma de loop quando usou a instruo For Each do VBScript. Embora
a instruo For Each seja a forma ideal de iterao atravs de uma coleo ou de uma
matriz, outros cenrios podem garantir uma construo de loop mais flexvel. Por
exemplo, scripts que monitoram ou medem recursos de sistema normalmente
precisam coletar dados em intervalos peridicos. improvvel que voc verifique o
espao livre em disco momentos aps instalar um novo disco rgido e depois nunca
mais verifique o espao livre ainda disponvel na unidade. Em vez disso, provvel
que voc verifique o espao livre em disco em intervalos regulares, talvez uma vez por
semana, uma vez por dia, ou a de hora em hora, dependendo do computador que est
sendo monitorado (por exemplo, servidores de correio normalmente usam espao em
disco de maneira mais rpida do que outras estaes de trabalho do usurio).

Se houver um perodo de tempo relativamente longo entre colees de dados,


aconselhvel executar o script como uma tarefa agendada. Dessa forma, voc pode
agendar o script para ser executado todas as manhs, s 2:00, e nunca mais se
preocupar com o assunto.
Porm, usar tarefas agendadas no sempre uma opo. Por exemplo, digamos que
voc deseje medir o uso do processador em um computador. Alm disso, voc deseja
medir esse uso a cada 10 segundos at coletar 500 amostras. Embora, teoricamente,
voc possa criar 500 tarefas agendadas, uma aps a outra, isso resulta em muito mais
trabalho. Uma abordagem mais adequada executar um nico script que colete todas
as 500 amostras.
Uma maneira de fazer com que um nico script execute o mesmo conjunto de
comandos vrias vezes incluir esses comandos em um loop For. Com um loop For,
possvel executar um conjunto de comandos um determinado nmero de vezes.
Por exemplo, o script mostrado na listagem 9 verifica de hora em hora por 12 horas o
espao livre em disco em um computador. Para isso, uma instruo For usada na
linha 7 indicando que o loop deve ser executado 12 vezes. As linhas 8-14 representam
o corpo do loop For e determinam o espao livre em disco de cada unidade de disco do
computador. A linha 14 interrompe o script por uma hora (por meio de uma constante
que interrompe o script por 3.600.000 milissegundos) e a linha 15 simplesmente a
instruo Next, que marca o final do loop.
Quando o script for executado, uma conexo ser estabelecida com o computador
remoto atl-dc-01. O script recuperar e exibir as informaes de espao livre em
disco e, em seguida, far uma interrupo de uma hora. Aps o trmino dessa
interrupo, o script executar um loop e recuperar as informaes sobre espao livre
em disco uma segunda vez. Esse processo continuar at que as informaes de
espao em disco tenham sido recuperadas 12 vezes. Em seguida, o script executar a
linha de cdigo aps a instruo Next. Como no h linhas de cdigo aps essa
instruo, o script ser finalizado.
Listagem 9 Executando comandos vrias vezes
1 Const CONVERSION_FACTOR = 1048576
2 Const ONE_HOUR = 3600000
3 Computer = "atl-dc-01"
4
5 Set objWmiService = GetObject("winmgmts://" & Computer)
6
7 For i = 1 to 12

8 Set colLogicalDisk = objWmiService.InstancesOf("Win32_LogicalDisk")


9 For Each objLogicalDisk In colLogicalDisk
10 FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR
11 FreeMegaBytes = Int(FreeMegaBytes)
12 WScript.Echo objLogicalDisk.DeviceID & " " & FreeMegaBytes
13 Next
14 Wscript.Sleep ONE_HOUR
15 Next
For
A instruo For permite executar um bloco de cdigo um determinado nmero de
vezes. Ela no deve ser confundida com a instruo For Each. A instruo For Each
usada para iterar os itens individuais em uma coleo (ou em uma matriz). A instruo
For usada para executar um conjunto especfico de instrues um determinado
nmero de vezes.
Para usar a instruo For, necessrio determinar um ponto inicial e um ponto final.
Como instrues For normalmente so criadas para executar um conjunto de
instrues X vezes, voc iniciar com 1 e terminar com X. Portanto, para executar a
mesma ao dez vezes, inicie com 1 e termine com 10.
Observao Voc pode escolher um ponto inicial arbitrrio (por exemplo, 314 ou
6.912) e concluir com o ponto final apropriado (324 ou 6.922). Porm, ser mais fcil
ler e manter seu cdigo se voc iniciar com 1 e terminar com 10.
A instruo For exige que voc use uma varivel de loop (tambm chamada de
contador) que mantm um clculo contnuo informando quantas vezes o loop foi
executado. Por exemplo, a varivel i usada como o contador no cdigo a seguir. O
contador iniciar em 1 e executar as linhas de cdigo contidas no corpo da instruo
For. Aps as instrues terem sido executadas, o contador aumentar
automaticamente em 1, significando que i agora igual a 2. O script retornar
automaticamente ao incio da instruo For e verificar se o valor 2 ainda est no
intervalo vlido. Como ele est, o corpo da instruo For ser executado uma segunda
vez.
For i = 1 To 5
Wscript.Echo i
Next
Wscript.Echo "Loop For concludo."

O que acontecer se i for igual a 6? O script retornar automaticamente ao incio do


loop For e verificar se 6 faz parte do intervalo vlido. Como no faz, o loop For ser
imediatamente finalizado e a execuo do script continuar na primeira linha aps a
instruo Next.
A sada do script ter a seguinte aparncia:
1
2
3
4
5
Loop For concludo.
Observao Haver vezes em que voc desejar executar o mesmo conjunto de
instrues continuamente; porm, no ser possvel determinar antecipadamente
quantas vezes ser necessrio executar o cdigo. Por exemplo, digamos que voc
deseje verificar o espao livre em disco uma vez por hora e que deseje continuar
executando essa verificao at que o espao em disco fique abaixo do espao
especificado. Nesse caso, voc deseja que o script inicie e continue a ser executado at
que o espao em disco fique abaixo do limite, independentemente da quantidade de
iteraes necessria para executar essa ao. Em situaes como essa, aconselhvel
usar um loop Do (discutido no livro).
Tomando decises
Um dos principais motivos para a utilizao de scripts como ferramentas de
administrao de sistema o fato de que eles reduzem a necessidade de interveno
humana. Os scripts introduzidos at o momento neste captulo tentam atingir esse
objetivo; a verso do script mostrado na listagem 8, por exemplo, pode conectar-se a
qualquer computador (mesmo remoto), conectar-se WMI e determinar o espao livre
em disco de cada unidade lgica instalada no computador. Executando esse script
regularmente, os administradores podero receber uma notificao antecipada caso
alguma unidade esteja com pouco espao em disco.
Porm, ainda tarefa do administrador do sistema analisar a sada do script e
determinar se um disco est ou no com pouco espao. O script pode ser aprimorado
atravs do exame de espao e da emisso de uma notificao somente quando o
espao livre est abaixo do nvel especificado. Com essa abordagem, os
administradores s sero notificados se um disco estiver com pouco espao. Se no

houver notificaes, porque todos os discos esto em conformidade com os padres


e nenhuma ao ser necessria.
O VBScript fornece vrias construes de programao que permitem aos scripts
"tomarem decises". Isso significa que um script pode analisar alguns dados e, em
seguida, executar uma ao especificada com base no valor dos dados.
A forma mais simples do cdigo de tomada de deciso a instruo If. Com a
instruo If, o script examina o valor de um dado especfico, comparando-o a um
limite pr-determinado (por exemplo, se o espao livre em disco menor do que 100
megabytes). Se a instruo for verdadeira (que seria o caso se somente 99 megabytes
de espao em disco estivessem disponveis), o script executar uma ao. Se a
instruo no for verdadeira, nenhuma ao ser executada.
Esse tipo simples de tomada de deciso mostrado na listagem 10. Na linha 11, o
script verifica se o espao livre menor do que 100 megabytes (isso feito atravs da
comparao entre o valor e a constante WARNING_THRESHOLD). Se essa instruo
condicional for verdadeira (por exemplo, se uma unidade tiver somente 99 megabytes
de espao livre), a instruo imediatamente aps a construo If ser executada.
Neste exemplo, a instruo seguinte a linha 12, que exibe a mensagem de que a
unidade tem pouco espao em disco.
Se a instruo condicional for falsa (por exemplo, se a unidade tiver 101 megabytes de
espao livre em disco), a linha 12 no ser executada. Em vez disso, o processamento
ser transferido para a linha 13, que marca o final da instruo If, e continuar na
linha 14.
Listagem 10 Tomando decises
1 Const CONVERSION_FACTOR = 1048576
2 Const WARNING_THRESHOLD = 100
3 Computer = "atl-dc-01"
4
5 Set objWmiService = GetObject("winmgmts://" & Computer)
6 Set colLogicalDisks = objWmiService.InstancesOf("Win32_LogicalDisk")
7
8 For Each objLogicalDisk In colLogicalDisks
9 FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR
10 FreeMegaBytes = Int(FreeMegaBytes)
11 If FreeMegaBytes < WARNING_THRESHOLD Then
12 WScript.Echo objLogicalDisk.DeviceID & " tem pouco espao em disco."

13 End If
14 Next
Executando vrias aes usando If-Then-Else
O script mostrado na listagem 10 exibir uma mensagem de aviso se uma unidade
tiver pouco espao em disco. Porm, se a unidade de disco tiver espao livre
adequado, nenhuma mensagem ser exibida. Para um script simples de monitorao,
isso aceitvel. Por outro lado, o usurio que estivesse executando esse script, no
teria como saber se a falta de sada havia ocorrido porque todas as unidades possuam
espao em disco adequado ou porque a execuo do script havia falhado por algum
motivo.
Em outras palavras, s vezes necessrio que o script avalie uma condio e, em
seguida, execute uma ao diferente com base nessa avaliao. Por exemplo, talvez
voc deseje exibir uma mensagem de aviso quando a unidade tiver pouco espao em
disco e uma mensagem "Sem problemas" quando a unidade tiver espao em disco
adequado. Esse tipo de abordagem pode ser implementado com a instruo If-ThenElse.
A funo da instruo If-Then-Else est implcita em seu nome. Se (If) uma condio
for verdadeira (ou falsa), execute esta ao. Caso contrrio (Else), execute esta ao.
Se houver pouco espao em disco, ecoe uma mensagem de aviso. Caso contrrio, ecoe
a mensagem "Sem problemas".
Um exemplo disso mostrado na listagem 11. Na linha 11, o espao livre em disco de
uma unidade comparado a um limite de aviso. Se a instruo condicional for
verdadeira (isto , se o espao livre em disco for menor do que o limite de aviso), a
linha 12 ser executada.
E se a instruo condicional for falsa? Para lidar com essa possibilidade, uma clusula
Else foi includa na linha 13. Se a instruo condicional for falsa e a unidade tiver
espao adequado, a linha 14, linha imediatamente aps a clusula Else, ser
executada.
Listagem 11 Usando uma instruo If-Then-Else
1 Const CONVERSION_FACTOR = 1048576
2 Const WARNING_THRESHOLD = 100
3 Computer = "atl-dc-01"
4
5 Set objWmiService = GetObject("winmgmts://" & Computer)

6 Set colLogicalDisks = objWmiService.InstancesOf("Win32_LogicalDisk")


7
8 For Each objLogicalDisk In colLogicalDisks
9 FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR
10 FreeMegaBytes = Int(FreeMegaBytes)
11 If FreeMegaBytes < WARNING_THRESHOLD Then
12 WScript.Echo objLogicalDisk.DeviceID & " tem pouco espao em disco."
13 Else
14 WScript.Echo objLogicalDisk.DeviceID & " tem espao em disco adequado."
15 End If
16 Next
possvel construir cenrios mais elaborados, cenrios que possam executar mais do
que apenas duas aes possveis. Formas diferentes de construir esses cenrios so
discutidas no System Administration Scripting Guide.
Matrizes
Colees so uma forma excelente de empacotar informaes, pois permitem trabalhar
com vrios itens, mesmo que voc no conhea os detalhes sobre esses itens. Por
exemplo, o script introduzido na listagem 8 permite recuperar o espao livre em disco
de todas as unidades instaladas em um computador, mesmo que voc no saiba
quantas unidades esto instaladas no computador. Para executar uma ao em cada
item da coleo, simplesmente use um loop For Each para iterar em toda a coleo e
execute a ao em todos os itens, um por um.
Objetos de automao podem criar colees automaticamente. Porm, pode haver
outras informaes, no retornadas por um objeto de automao, que sero mais
fceis de manipular se voc puder iterar no conjunto de itens um por um. Por exemplo,
digamos que voc deseje verificar o espao livre em disco disponvel em trs
computadores e no apenas em um. Voc pode escrever o cdigo para verificar o
primeiro computador, copiar e colar esse cdigo e, em seguida, modificar o cdigo
colado para verificar o espao livre em disco no segundo computador. possvel
repetir esse processo para verificar o espao livre em disco no terceiro computador.
Embora essa abordagem funcione, ela logo se tornar tediosa, especialmente se voc
precisar verificar, por exemplo, 100 computadores. Alm disso, digamos que voc
precise alterar o cdigo, talvez retornando no apenas o espao livre na unidade, mas
tambm o tamanho total da unidade. Para fazer essa alterao, seria necessrio

alterar todas as 100 instncias, um processo que levaria muito tempo e aumentaria a
possibilidade de erro.
Uma abordagem mais adequada seria usar um loop For Each e percorrer uma lista de
computadores, verificando o espao livre em disco de cada um. Para fazer isso, devese colocar os nomes dos computadores em uma matriz, uma estrutura de dados que
pode ser usada praticamente da mesma forma que uma coleo.
O script mostrado na listagem 12 coloca os nomes de trs computadores (atl-dc-01,
atl-dc-02 e atl-dc-03) em uma matriz e usa um loop For Each para conectar-se a cada
computador e recuperar as informaes de espao livre em disco. Na linha 3, uma
matriz chamada Computers criada. Isso feito com a funo Array, atravs da
especificao dos nomes dos trs computadores como os parmetros da funo (os
nomes so colocados entre aspas, pois so seqncias de caracteres). Na linha 5, um
loop For Each usado para percorrer todos os elementos da matriz Computers.
Listagem 12 Usando matrizes
1 Const CONVERSION_FACTOR = 1048576
2 Const WARNING_THRESHOLD = 100
3 Computers = Array("atl-dc-01", "atl-dc-02", "atl-dc-03")
4
5 For Each Computer In Computers
6
7 Set objWmiService = GetObject("winmgmts://" & Computer)
8 Set colLogicalDisks = objWmiService.InstancesOf("Win32_LogicalDisk")
9
10 For Each objLogicalDisk In colLogicalDisks
11 FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR
12 FreeMegaBytes = Int(FreeMegaBytes)
13 If FreeMegaBytes < WARNING_THRESHOLD Then
14 WScript.Echo Computer & " " & objLogicalDisk.DeviceID & _
15 " tem pouco espao em disco."
16 End If
17 Next
18
19 Next
Embora matrizes possam parecer similares a colees, pelo menos no contexto da
instruo For Each, existe uma diferena importante. Uma matriz uma lista de
valores simples e indexada e uma coleo um objeto de automao, baseado em

COM e completamente desenvolvido. Isso afeta o modo como os dois tipos de lista so
criados e como itens de lista individuais podem ser acessados. Por exemplo, voc deve
usar a palavra-chave Set para criar uma coleo (linha 8) da mesma forma como faria
com qualquer objeto de automao. As matrizes no possuem esses requisitos, pois
no so objetos de automao.
Um nmero de ndice atribudo a cada elemento de uma matriz. No VBScript, o
nmero de ndice 0 atribudo ao primeiro elemento de uma matriz e os nmeros 1, 2,
3 etc. so atribudos aos elementos subseqentes. Logo, a matriz criada no script
anterior conteria os nmeros de ndice e os elementos mostrados na tabela 3. Observe
que o nmero de ndice mais alto ser sempre uma unidade menor do que o nmero
de elementos da matriz.
Tabela 3
Nmero de ndice Elemento
0

atl-dc-01

atl-dc-02

atl-dc-03

Voc pode usar esses nmeros de ndice para acessar elementos individuais na matriz.
Por exemplo, essa linha de cdigo exibir atl-dc-02, o valor do nmero de ndice 1 e o
segundo elemento da matriz:
Wscript.Echo Computers(1)
Para exibir o valor de um item diferente na matriz, substitua o valor 1 pelo nmero de
ndice apropriado.
Mtodos adicionais para criar matrizes e acessar os elementos individuais dessas
matrizes so abordados no System Administration Scripting Guide.
Entrada
O script mostrado na listagem 12 foi criado para uma empresa que no espera
alteraes na infra-estrutura de computao, j que essa infra-estrutura j est
estabelecida. Uma infra-estrutura esttica como essa a exceo e no a regra. A
maioria das empresas possui um ambiente mais dinmico; embora somente trs
servidores (atl-dc-01, atl-dc-02, atl-dc-03) precisem de monitorao no momento, no
h garantias de que somente esses trs servidores precisaro de monitorao
posteriormente.
Itens embutidos em cdigo, como nomes de computador nos scripts, ocasionam dois
problemas relacionados:

Falta de flexibilidade. O script da listagem 12 recuperar somente


informaes sobre o espao em disco disponvel nos computadores atl-dc-01,
atl-dc-02 e atl-dc-03. Se voc precisar recuperar espao livre em disco para o
computador atl-dc-04, ser necessrio modificar o script.

Atualizaes freqentes. O script da listagem 12 foi criado para recuperar


informaes sobre o espao livre em disco de um conjunto especfico de
computadores (por exemplo, todos os controladores de domnio em uma
localizao especfica). Sempre que um novo controlador de domnio for
adicionado ou sempre que um controlador de domnio existente for retirado, o
script precisar ser atualizado. Se voc usar somente esse script em sua
empresa, isso talvez no cause problemas. Porm, se usar vrios scripts, voc
provavelmente perder mais tempo modificando-os do que economizar
usando-os.

H vrias formas de se permitir que os usurios insiram informaes, como nomes de


servidor, em um script (para obter mais detalhes sobre vrios desses mtodos,
consulte o System Administration Scripting Guide). Talvez a maneira mais fcil seja
fazer com que os usurios especifiquem essas informaes como argumentos sempre
que o script for executado.
Um argumento (tambm conhecido como parmetro) a informao fornecida junto
com o comando que de fato executa o script. Por exemplo, digamos que voc
normalmente inicie um script da seguinte maneira:
cscript DiskSpace.vbs
Um argumento qualquer informao extra adicionada ao final do comando. Por
exemplo, esse comando possui trs argumentos, um para cada nome de computador:
cscript DiskSpace.vbs atl-dc-01 atl-dc-02 atl-dc-03
Alm de fornecer argumentos, o script deve incluir o cdigo que usa esses
argumentos. Esse tipo de cdigo abordado em detalhes no captulo 3 do System
Administration Scripting Guide. Um exemplo simples tambm mostrado na listagem
13. Na linha 9 desse script, um loop For Each estabelecido para percorrer o conjunto
de argumentos fornecido na inicializao do script. Nesse script, cada argumento
atribudo sucessivamente varivel Computer e, em seguida, usado para estabelecer
conexo com o servio WMI no computador (linha 11). Com base na linha de comando
de exemplo acima, na primeira vez que o loop For Each for executado, o valor atl-dc01ser atribudo a Computer. Em iteraes subseqentes, os valores atl-dc-02 e atldc-03 sero atribudos a Computer.

Listagem 13 Obtendo entrada de usurio


1 Const CONVERSION_FACTOR = 1048576
2 Const WARNING_THRESHOLD = 100
3
4If WScript.Arguments.Count = 0 Then
5 WScript.Echo "Uso: DiskSpace.vbs servidor1 [servidor2] [servidor3] ..."
6 WScript.Quit
7 End If
8
9 For Each Computer In WScript.Arguments
10
11 Set objWmiService = GetObject("winmgmts://" & Computer)
12 Set colLogicalDisks = objWmiService.InstancesOf("Win32_LogicalDisk")
13
14 For Each objLogicalDisk In colLogicalDisks
15 FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR
16 FreeMegaBytes = Int(FreeMegaBytes)
17 If FreeMegaBytes < WARNING_THRESHOLD Then
18 WScript.Echo Computer & " " & objLogicalDisk.DeviceID & _
19 " tem pouco espao em disco."
20 End If
21 Next
22
23Next
Uma vantagem em usar argumentos o fato de que eles so colocados
automaticamente em uma coleo (Wscript.Arguments). Isso torna mais fcil percorrer
os argumentos fornecidos a um script: voc simplesmente configura um loop For Each
e itera cada argumento da coleo, exatamente da mesma forma como itera as
unidades de disco individuais em uma coleo de unidades de disco.
Como argumentos so colocados em uma coleo, tambm fcil verificar quantos
argumentos, se houver, foram fornecidos quando o script foi iniciado. Na linha 4 do
script, Wscript.Arguments.Count usado para determinar a quantidade de argumentos
fornecida (o nmero de argumentos fornecido ser igual ao nmero de itens da
coleo de argumentos). Se a contagem for igual a 0, significando que nenhum
argumento foi fornecido, um conjunto de instrues de utilizao ser exibido e o
script ser finalizado (com o mtodo Wscript.Quit).

Tratamento de erros
O script mostrado na listagem 13 bastante arriscado. Digamos que o usurio tenha
inserido um nome de servidor invlido como um argumento. Quando o script tentar se
conectar a esse computador inexistente, falhar e a mensagem de erro "The remote
server machine does not exist or is unavailable" ser exibida.
Claro que uma determinada porcentagem de risco inerente a todos os scripts usados
at o momento neste artigo, incluindo os scripts em que os nomes de computador
foram embutidos em cdigo. Afinal, o script no pode distinguir entre um nome de
computador invlido e um nome de computador vlido que, por algum motivo, no
est disponvel na rede. Por exemplo, digamos que voc execute o script da listagem
12 e que o computador chamado atl-dc-01 esteja off-line no momento. Neste ponto, o
script falhar e no ser mais processado. Isso significa que voc no s falhar ao
recuperar o espao livre em disco no computador atl-dc-01, como tambm falhar ao
recuperar o espao livre em disco nos computadores atl-dc-02 e atl-dc-03, mesmo que
eles estejam conectados rede e funcionando corretamente. Isso ocorre pois o script
finalizado antes de tentar se conectar a atl-dc-02 ou atl-dc-03.
A incapacidade em se conectar ao computador atl-dc-01 um exemplo de erro em
tempo de execuo, que ocorre aps o script ter sido iniciado (por comparao, um
erro de sintaxe, como uma palavra-chave incorreta, gerado e o script finalizado
antes que as linhas de cdigo sejam de fato executadas). Para obter ajuda na proteo
contra erros em tempo de execuo, voc pode incluir a instruo de tratamento de
erros do VBScript, On Error Resume Next, em seus scripts.
Sem o tratamento de erros, um script finalizado imediatamente quando encontra um
erro em tempo de execuo. Com o tratamento de erros, o script no finalizado, em
vez disso, ele tenta executar a linha seguinte do script. O script procede desta
maneira, ignorando as linhas que geram erros e executando as linhas que no geram
erros.
Tratamento de erros com o objeto Err
On Error Resume Next permite que o script continue funcionando caso ocorra um erro
em tempo de execuo. Porm, isso pode causar pelo menos dois problemas. Por um
lado, nenhuma mensagem de erro gerada para informar que ocorreu erro. Se
executar um script e nada ocorrer, voc no ter como saber onde houve falha.

Por outro lado, talvez voc prefira que um script no tente executar todas as linhas
caso ocorra erro em tempo de execuo. Por exemplo, considere um script que siga
este procedimento:
1. Conecta-se a um computador remoto.
2. Copia um conjunto de arquivos do computador local para o computador remoto.
3. Exclui o conjunto de arquivos original do computador local.
Digamos que voc tenha executado esse script, mas que o computador remoto no
esteja disponvel. Veja a seguir uma seqncia possvel de eventos.
1. O script tenta se conectar ao computador remoto e falha. Porm, On Error
Resume Next assegura que o script continue sendo executado.
2. O script tenta copiar arquivos para o computador remoto. A operao falha,
pois o computador remoto no est acessvel.
3. O script exclui os arquivos do computador local. Infelizmente, essa ao bemsucedida, pois o computador local est disponvel. Como resultado, os arquivos
so excludos do computador local, mas no so copiados para o computador
remoto.
Felizmente, voc pode usar o objeto Err intrnseco do VBScript para determinar se o
erro ocorreu ou no, e caso tenha ocorrido, para executar a ao apropriada.
O objeto Err criado automaticamente sempre que voc executa um script (h
somente um objeto Err por instncia de script). Esse objeto contm vrias
propriedades, incluindo as trs mostradas na tabela 4. Sempre que o script encontra
um erro em tempo de execuo, essas propriedades so preenchidas automaticamente
com as informaes que identificam o erro.
Tabela 4
Propriedade

Descrio

Description

Descrio do erro. A descrio pode ser usada para informar ao


usurio que ocorreu erro. Isso pode ser realizado com o eco do
valor:
Wscript.Echo Err.Description

Number

Nmero inteiro que identifica de forma exclusiva o erro ocorrido.


Esse nmero pode representar um nmero de erro intrnseco do

VBScript ou um nmero de erro derivado de um objeto de


automao (nmeros de erro do objeto de automao so
conhecidos como SCODE, abreviatura para cdigo de status).
Para determinar a origem do nmero de erro, use a propriedade
Source.
Source

Nome da classe ou identificador programtico (ProgID) do objeto


que causou o erro. Normalmente, quando o VBScript
responsvel pelo erro, a mensagem "Microsoft VBScript runtime
error" exibida como a origem. Se um objeto de automao for
responsvel pelo erro, voc ver o ProgID (por exemplo,
"Word.Application").

Quando um script iniciado, o valor padro 0 (sem erros) atribudo propriedade


Number. Caso um erro seja encontrado, o valor da propriedade Number alterado.
Isso permite a voc verificar periodicamente se o script encontrou erros. Por exemplo,
talvez voc deseje verificar o status de erro aps tentar se conectar a um computador
remoto. Se Err.Number for igual a 0, nenhum erro ter ocorrido. Se Err.Number no
for igual a zero, ter ocorrido algum tipo de erro e voc poder supor que a tentativa
de conexo com o computador remoto falhou. Como resultado, o script executar uma
ao com base no fato de que o computador remoto no estava disponvel.
Esse tipo de tratamento de erro implementado no script mostrado na listagem 14. Na
linha 1 do script, o tratamento de erros ativado com a instruo On Error Resume
Next do VBScript. Na linha 11, o script usa um loop For Each para percorrer uma lista
de nomes de servidor. Na linha 12, o script tenta se conectar a cada um desses
servidores.
Mas o que ocorre se um desses servidores no est acessvel? Conforme observado, na
linha 12 o script tenta se conectar a um desses servidores remotos. Se a conexo for
bem-sucedida, nenhum erro ser gerado, significando que Err.Number permanecer
igual a 0. Porm, se a conexo falhar, um erro ser gerado e Err.Number ser alterado
para refletir o nmero atribudo ao erro.
Se a tentativa de conexo na linha 12 falhar, On Error Resume Next garantir que o
script tente executar a linha 13. Na linha 13, o script verifica o valor de Err.Number.
Se o valor for diferente de 0 (significando que um erro ocorreu), o script exibir
Err.Description e, em seguida, reiniciar o loop com o prximo nome de servidor. Se o
valor for 0, isso significa que a conexo foi bem-sucedida. Em seguida, o script
recupera o espao livre em disco do computador remoto.

Listagem 14 Tratamento de erros


1 On Error Resume Next
2
3 Const CONVERSION_FACTOR = 1048576
4 Const WARNING_THRESHOLD = 100
5
6 If WScript.Arguments.Count = 0 Then
7 WScript.Echo "Uso: DiskSpace.vbs servidor1 [servidor2] [servidor3] ..."
8 WScript.Quit
9 End If
10
11 For Each Computer In WScript.Arguments
12 Set objWmiService = GetObject("winmgmts://" & Computer)
13 If Err.Number <> 0 Then
14 WScript.Echo Computer & " " & Err.Description
15 Err.Clear
16 Else
17 Set colLogicalDisks = _
18 objWmiService.InstancesOf("Win32_LogicalDisk")
19 For Each objLogicalDisk In colLogicalDisks
20 FreeMegaBytes = objLogicalDisk.FreeSpace / CONVERSION_FACTOR
21 FreeMegaBytes = Int(FreeMegaBytes)
22 If FreeMegaBytes < WARNING_THRESHOLD Then
23 WScript.Echo Computer & " " & objLogicalDisk.DeviceID & _
24 " tem pouco espao em disco."
25 End If
26 Next
27 End If
28 Next
Se voc executar o script da listagem 14 e um dos servidores no estiver on-line, o
objeto Err e suas propriedades sero preenchidos como mostrado na tabela 5.
Tabela 5
Propriedade

Valor

Err.Description

The remote server machine does not exist or is unavailable

Err.Number

462

Err.Source

Microsoft VBScript runtime error

Limpando erros
A linha 15 do script usa o mtodo Clear para redefinir explicitamente as propriedades
do objeto Err. Isso importante, pois caso essa redefinio no ocorra, essas
propriedades s sero alteradas quando outro erro ocorrer. Os valores da propriedade
no so alterados quando no ocorrem erros. Como resultado, o script pode agir de
forma no apropriada com base na noo errnea de que ocorreu erro.
Isso o que acontecer se voc no redefinir explicitamente as propriedades do objeto
Err. Quando um script iniciado, o objeto Err apresenta o nmero padro 0 e as
propriedades de descrio e de origem vazias. Se o script no puder se conectar ao
computador atl-dc-01, as propriedades do objeto Err sero definidas como mostrado
na tabela 5.
Isso funciona conforme o esperado. Porm, o que acontece quando o computador
efetua um loop e tenta se conectar ao computador atl-dc-02? Nesse caso, a tentativa
bem-sucedida e nenhum erro gerado. No entanto, como nenhum erro foi gerado, o
objeto Err ainda contm os valores de propriedade mostrados na tabela 5, pois esse
objeto s atualizado quando ocorre um erro. Por sua vez, o script verifica que 462
o nmero do erro, o valor restante da tentativa malsucedida de conexo com o
computador atl-dc-01. Como 462 no igual a 0, o script executa uma ao com base
na deciso incorreta de que um erro ocorreu e, portanto, o computador atl-dc-02 deve
estar inacessvel. Esse mesmo problema ocorre quando o script tenta recuperar espao
livre em disco no computador atl-dc-03.
O mtodo Clear supera esse problema redefinindo o objeto Err para os valores padro
(number igual a 0, source e description definidas como vazio). Como os valores so
redefinidos, eles refletiro corretamente o fato de que nenhum erro ocorreu quando o
script tentar recuperar espao livre em disco para o computador atl-dc-02.
Aviso de iseno de responsabilidade da verso Beta
Esta documentao uma verso antecipada da documentao final e pode ser
alterada substancialmente antes da verso comercial final. Alm disso, informao
confidencial de propriedade da Microsoft Corporation. Ela divulgada conforme
descrito no acordo de no-divulgao estabelecido entre o adquirente e a Microsoft.
Este documento fornecido somente para fins informativos e a Microsoft no oferece

quaisquer garantias, explcitas ou implcitas, neste documento. As informaes


contidas neste documento, incluindo o URL e outras referncias ao site da Internet na
Web, esto sujeitas a alteraes sem aviso prvio. O usurio assume inteiro risco
quanto ao uso e aos resultados do uso deste documento. Salvo indicao em contrrio,
os exemplos de empresas, organizaes, produtos, pessoas e acontecimentos aqui
mencionados so fictcios. Nenhuma associao com qualquer empresa, organizao,
produto, pessoa ou acontecimento real intencional ou deve ser inferida. Obedecer a
todas as leis de direitos autorais aplicveis responsabilidade do usurio. Sem limitar
os direitos autorais, nenhuma parte deste documento pode ser reproduzida,
armazenada ou introduzida em um sistema de recuperao, ou transmitida de
qualquer forma por qualquer meio (eletrnico, mecnico, fotocpia, gravao ou
qualquer outro), ou para qualquer propsito, sem a permisso expressa, por escrito,
da Microsoft Corporation.
A Microsoft pode ter patentes ou requisies para obteno de patente, marcas
comerciais, direitos autorais ou outros direitos de propriedade intelectual que
abrangem o contedo deste documento. A posse deste documento no lhe confere
nenhum direito sobre as citadas patentes, marcas comerciais, direitos autorais ou
outros direitos de propriedade intelectual, salvo aqueles expressamente mencionados
em um contrato de licena, por escrito, da Microsoft.
Trabalho no publicado. 2002 Microsoft Corporation. Todos os direitos reservados.

Você também pode gostar