You are on page 1of 10
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 instrumentagao de gerenciamento do Windows (WMI) e as interfaces de servico do Active Directory (ADSI), o Microsoft® Visual Basic® Scripting Edition (VBScript) torna-se uma linguagem de scripts poderosa. Usando 0 VBScript juntamente com essas tecnologias, vocé pade escrever um script de aproximadamente 10.000 linhas, um script completo com tratamento de erros, sub-rotinas e outras construgdes de programac3o avancadas. Por sua vez, esse script fornece a vocé controle completo sobre todos os aspectos do seu ambiente de computacao. No entanto, 0 que torna o VBScript uma ferramenta to util para administradores de sistema ¢ 0 fato de que no é preciso criar solugdes tao elaboradas e complicadas. Reconhecidamente, scripts podem ser usados para criar uma solugao de gerenciamento empresarial abrangente. Porém, talvez o mais importante seja o fato de que os scripts também podem ser usados do seguinte modo: um administrador do sistema pode gastar alguns minutos digitando algumas linhas de cédigo no Bloco de Notas e criar instantaneamente uma solucao personalizada para um problema especifico. Por exemplo, o script de trés linhas mostrado na listagem 1 pode ser executado sempre que vocé precisar saber a quantidade de espace livre em disco disponivel na unidade C do seu computador. Listagem 1 Recuperando espaco livre em disco com o VBScript 1 Set objwmiService = GetObject("winmgmts:") 2 Set objLogicalDisk = objwmiService.Get("Win32_LogicalDisk.DevicelD='C: 3 WScript.Echo objLogicalDisk.FreeSpace Se estiver enfrentado problemas com usuarios que utilizam muito espaco na unidade C de seus computadores, agora vocé tem uma solucdo personalizada para identificar os computadores com pouco espaco livre em disco. Além disso, voc pode desenvolver essa solugao personalizada usando somente o Blaco de Notas e sé precisaré digitar as trés linhas de cédigo j4 mencionadas. E claro que talvez esse script no atenda completamente as suas necessidades. Por exemplo, o script sé informa a respeito do espaco livre em disco disponivel no seu computador local; ele no pode informar a quantidade de espaco livre disponivel em um computador remato. Da mesma forma, o script relata apenas 0 espaco livre disponivel na unidade C; ele no informa nada a respeito do espago livre disponivel nas unidades D e E, por exemplo. Porém, se o script ndo atender completamente as suas necessidades, ele poderd ser facilmente modificado, sem que seja preciso iniciar um novo script a partir do zero. Essa é outra vantagem do VBScript: ¢ possivel iniciar com um script muito simples e adicionar recursos a ele 4 medida que suas necessidades forem mudando e vocé for se tornando mais proficiente com a linguagem Conceitos basicos do VBScript Este artigo foi criado para ilustrar 0 processo de se comecar com um script basico e de se adicionar, gradualmente, mais recursos sofisticados a ele. O artigo comeca com 0 script mostrado na listagem 1, um script que relata o espaco livre em disco na unidade C. Segdes subseqlientes usardo esse script simples de trés linhas e gradualmente adicionaro mais recursos para tornd-lo mais util em mais situaces. Quando essa série de aprimoramentos estiver completa, vocé tera um script que pode: + Recuperar informagées sobre o espago livre em disco de qualquer computador de sua empresa, inclusive computadores rematos. + Recuperar informagdes sobre o espaco livre em disco de varios computadores. + Recuperar informagdes sobre o espaco livre em disco de todas as unidades instaladas em um computador, + Emitir uma notificago somente se uma unidade tiver pouco espaco em disco, + Continuar funcionando caso um usuario digite um nome de computador invalido ou caso um computador ndo esteja disponivel na rede. A medida que os novos recursos forem adicionados ao script, as construgdes do VBScript necessarias para fornecer esses aprimoramentos também serdo brevemente explicadas. (No capitulo do System Administration Scripting Guide do qual esse arquivo é derivado, essas construgdes so explicadas em mais detalhes.) Trabalhando com objetos © VBScript permite a administradores do sistema criar scripts complexos usando recursos de programacdo avancados, como arvores de decisSo, loop, tratamento de erros e a capacidade de chamar funcGes e sub-rotinas. Porém, o VBScript no inclui func6es intrinsecas a execucdo de tarefas de administracdo de sistemas. O VBScript possui funcées internas para a determinacdo da raiz quadrada de um numero ou do valor ASCII de um caractere, mas no possui funcGes internas para a interrupcao de servigos, para a recuperacdo de eventos em logs de eventos ou para a execucao de outras tarefas do interesse de administradores de sistemas, Usando objetos COM Felizmente, ha maneiras de se executar essas tarefas por meio de programago. Isso é feito basicamente através do uso de objetos de automacdo. Objetos de automacdo sao um subconjunto de COM (modelo de objeto componente), uma forma padrao de aplicativos (arquivos .exe) ou bibliotecas de programacdo (arquivos .dll) apresentarem seus recursos como uma série de objetos. Por sua vez, os programadores (ou escritores de script) podem utilizar esses abjetos -- e os recursos do aplicativo ou da biblioteca de programacdo -- em seus préprios projetos. Por exemplo, um aplicative de processamento de texto pode expor o verificador ortografico como um objeto de automago, fornecendo aos escritores de script uma maneira de adicionar a verificagéo ortografica a seus projetos. ‘A capacidade de trabalhar com objetos de automacao e utilizar as propriedades e os métodos desses objatos torna o VBScript uma ferramenta poderosa para administragao de sistemas. 0 VBScript sozinho no pode ler eventos em um lag; no entanto, ele pode usar os recursos incluidos na WMI para recuperar esses eventos. O VBScript no possui funcées intrinsecas & criacdo de contas de usuério no Active Directory; porém, a linguagem pode usar os recursos da ADSI para criar essas contas. Na verdade, 0 VBScript é freqlientemente chamado de “linguagem cola", pois uma de suas aplicaces principais ¢ "colar" objetos. Em vez de fornecer um numero infinito de fungdes intrinsecas dedicadas 4 administragSo de sistemas, o VBScript fornece duas funcées, GetObject e CreateObject, e os elementos de linguagem necessarios para o uso dos métodos e das propriedades de objetos de autom aco. O script mostrado na listagem 2 ilustra a importdncia de objetos de automac3o no \VeScript. Esse script relata a quantidade de espago livre em disco na unidade C do computador local. E, ainda, ele faz isso usando pouco cédigo VBScript. Em vez disso, 0 script: 1. Usa a funcSo VBScript GetObject para se conectar 4 WMI através da biblioteca de scripts WMI (um objeto de automacao) Usa 0 método Get, fornecido pelo objeto de automacdo WMI, para recuperar as is propriedades da unidade C. 3. Usa 0 método Echo do Windows Script Host (WSH) para relatar a quantidade de espago livre em disco na unidade C. Alids, WSH é apenas outro objeto de automagao. Listagem 2 Usando objetos no VBScript 1 Set objwmiService = GetObject("winmgmts:") 2 Set abjLogicalDisk = objWmiService.Get("Win32_LogicalDisk.DevicelD='C: 3 WScript.Echo objLogicalDisk.FreeSpace No exemplo anterior, 0 objetivo principal do VBScript era colar os recursos da WMI e do WSH. Isso permitiu a vocé recuperar 0 espaco livre em disco (algo que 0 WSH nao pode fazer sozinho) e exibir 0 valor de volta para a tela (algo que a WMI n3o pode fazer sozinha) Criando objetos Antes de utilizar os métodos ou as propriedades de um objeto de automacdo, vocé deve obter uma referéncia ao objeto, um processo conhecido como criar ou determinar 0 objeto, Criar objetos pode parecer confuso & primeira vista, pois 0 VBScript e o WSH fornecem os métodos CreateObject e GetObject para acessar objetos. Além disso, embora as implementacdes sejam semelhantes, ha algumas diferencas sutis que crescem em importancia 4 medida que vocé se torna proficiente em scripts. Essas diferencas so discutidas em mais detalhes no livro. Por enquanto, use as seguintes diretrizes praticas sem se preacupar com o fato de estar usando as fungdes do VBScript ou os métodos do WSH (porém, na maioria dos casos, vocé usaré as funcées do VBScript): + Use GetObject para criar objetos WMI ou ADSI. Quando estiver utilizando GetObject, use um identificador de origem para identificar 0 objeto a ser criado. Um identificador de origem 6 simplesmente uma sequiéncia de caracteres, com um prefixo obrigatério, que facilita a descri¢o do objeto de destino, da mesma forma como um nome de arquivo ¢ um caminho completo descrevem um arquivo especifico no sistema de arquivos, + Use CreateObject para criar objetos que nao sejam WMI ou ADSI. CreateObject usa um identificador por meio de programacao, ProglD, para identificar 0 objeto a ser criado. Um ProgID a seqliéncia de caracteres fixa que um abjeto adiciona ao Registro quando o objeto ¢ instalado e registrado no computador. Prefixos de identificador de origem também sdo armazenados no Registro, Estas no so regras fixas; algumas vezes vocé precisara usar CreateObject para criar objetos WMI que nao sejam SWbemServices (por exemplo, SWbemDateTime). Alguns objetos ADSI exigem, de forma semelhante, o uso de CreateObject. Porém, em geral, CreateObject sera necessério somente durante a criagdo de novas instancias de itens como objetos de shell, de rede e de controlador do WSH, objetos de dicionario, FileSystem Object e o Internet Explorer, entre varios outros objetos. Objetos intrinsecos Alguns objetos so intrinsecos. Objetos intrinsecos so os abjetos criados sem nunca ter sido necessério efetuar uma chamada para GetObject ou CreateObject. No script mostrado na listagem 2, 0 script conecta-se 4 WMI usando este cédigo: Set abjwmiService = GetObject("winmamts:") Isso cria uma referéncia, chamada objWmiService, ao objeto SwbemServices da biblioteca de scripts WMI. Observe que nenhuma sequéncia de caracteres semelhante é usada para criar uma referéncia ao objeto Wscript do WSH na listagem 2. Em vez disso, o método Echo & chamado sem a criac&io anterior de qualquer tipo de objeto WSH. Isso ocorre porque WScript é um objeto intrinseco. Nao é necessario criar um objeto Wscript, pois WScript sera criado automaticamente quando vocé executar um script de VBScript. O objeto de erro do VBScript, Err, 6 outro objeto intrinseco. O objeto Err sera criado automaticamente quando ocorrer um erro no script. Examinaremos o objeto Err posteriormente neste artigo. Usando uma referéncia de objeto Com a automago, vocé ndo trabalha diretamente com o préprio objeto. Em vez disso, vocé cria uma referéncia ao objeto usando GetObject ou CreateObject e atribuindo o objeto a uma variavel. Apds a criacdo dessa referéncia, vocé poder acessar os métodos e as propriedades do objeto usando a variavel e no 0 abjeto propriamente dito. Na listagem 2, GetObject é usado para atribuir 0 objeto SWbemServices da WMI & variavel objWmiService. Depois que a atribuic&o for concluida, todos os métodos e as propriedades do objeto SWbemServices poderdo ser acessados através de objwmiservice. Por exemplo, na linha 2 do script, 0 método Get é usado para recuperar as propriedades da unidade C. Sempre que criar uma referéncia de objeto, vocé deverd usar a palavra-chave Set quando atribuir a referéncia a uma variavel. Por exemplo, esta linha de cédigo resultard em erro em tempo de execucdo: objwmiService = Getobject("winmamts:") Para criar a referéncia do objeto, use a palavra-chave Set da seguinte maneira’ Set abjwmiService = GetObject("winmamts:") Set sé é usada durante a criacdo de uma referéncia de objeto, Se vocé usar essa palavra-chave para outros propésitos, como atribuir um valor a uma variavel, ocorrerd um erro em tempo de execuggo. Por exemplo, esta linha de cédigo falhara, pois nenhum objeto chamado y podera ser encontrado no computador: Setx=y Métodos de chamada Os objetos de automacdo permitem usar os recursos dos objetos nos scripts. Por sua vez, isso permite a vocé criar scripts mais Uteis e poderosos do que faria se estivesse restrito aos recursos da linguagem de scripts. Por exemplo, é impossivel desenhar um gréfico usando somente o VBScript. No entanto, com a automacdo, vacé pode utilizar os recursos do Microsoft Excel e adicionar facilmente um gréfico a, por exemplo, uma pagina da Web, Normalmente, os abjetos de automacdo expdem métodos propriedades (parém, nao ha requisitos para que exponham nenhum dos dois). Os métodos so equivalentes as ages que os objetos podem executar. Por exemplo, embora o script da listagem 2 tenha somente trés linhas, ele usa a automagao para acessar os métodos de dois objetos COM diferentes e, assim, executar duas agGes distintas: +O método Get, disponivel através do objeto SWbemServices da WMI. © método Get recupera informacGes do recurso gerenciado pela WMI especificado +O método Echo, disponivel através do objeto WScript. © método Echo exibe informagées na tela. Se um script estiver sendo executado em uma janela de prompt de comands e, portanto, sob Cscript.exe, essa informagao sera exibida dentro dessa janela. Se o script estiver sendo executado sob Wscript.exe, a informagao ser exibida em uma caixa de didlogo, Depois de criar uma referéncia a um objeto, vocé poder chamar os métodos desse objeto usando a notac3o de pontos. A notacSo de pontos tem esse nome, pois vocé chama um método digitando o nome da variavel que faz referéncia ao objeto, um ponto e o nome do método (dependendo do método, vocé também poderd digitar seus parémetros). Geralmente, a notacdo de pontos tem a seguinte aparéncia: Referéncia_de_Objeto.Nome_do_Método Na listagem 2, a chamada do método Get de SWbemServices pode ser dividida conforme mostrado na tabela 1. Tabela 1 Item Descricéo objwmiService Referancia do objeto. Ponto (separa a referéncia do objeto e o nome do metodo) Get Nome do método. ("Win32_LogicalDisk.DevicelD='C:'") Pardmetro do método. Para o método Get, isso pode ser lido como "Obtenha a insténcia da classe Win32_LogicalDisk onde DevicelD ¢ igual a C:" Uma observacao sobre Wscript.Echo Em vez de usar Wscript.Echo para exibir 0 espace livre em disco, voc pode usar a func&o Msgbox do VBScript: Msgbox objLogicalDisk.FreeSpace Porém, neste artigo, usaremos Wscript.Echo e no Msgbox. Isso sera feito porque a func&o Msgbox sempre exibe as informagdes em uma caixa de didlogo grafica. Quando essa caixa de didlogo for exibida, vocé deverd clicar no bate OK antes que o script prossiga. Recuperando propriedades Propriedades so atributos associados a um objeto. Elas sdo especialmente importantes em scripts de administrago de sistemas, pois varios dos objetos que vocé usa so representacGes virtuais de objetos reais de sistema operacional e de computador. Na listagem 2, a propriedade FreeSpace é recuperada com a mesma notacaio de pontos usada para chamar métodos. Isso pode parecer irrelevante, mas com a WMI, a referéncia nao é algum algoritmo de programacdo amorfo, mas sim a um disco rigido real no computador. Portanto, a propriedade FreeSpace ndo é somente uma propriedade de um objeto de automacdo; ela 6 uma propriedade da unidade C. De certa maneira, WMI cria um espelho virtual de um objeto fisico real. Quando vocé recupera as propriedades desse espelho virtual, também recupera as propriedades do objeto fisico. Variaveis O script mastrado na listagem 2 funciona exatamente como o esperado; quando executado, ele relata 0 espaco livre em disco na unidade C. Porém, isso nao significa que o script ndo possa ser aprimorado. Por exemplo, a propriedade FreeSpace informa ‘ontimero de bytes disponiveis em uma unidade. Como unidades de disco so normalmente medidas em gigabytes, quase sempre a propriedade FreeSpace retorna um valor dificil de interpretar. Por exemplo, a figura 1 mostra o valor relatado para uma unidade com aproximadamente 10 gigabytes de espaco livre em disco. Figura 1 Embora pareca dbvio que a unidade C possui espaco em disco adequado, é muito menos ébvio a quantidade de espaco em disco realmente disponivel. Administradores de sistema podem achar facil interpretar os dados retornados pelo script, caso os dados sejam relatados como megabytes em vez de bytes. © VBScript inclui uma grande variedade de funces matematicas que permitem. executar ages, como a conversio de bytes em megabytes. Além disso, o VBScript também fornece uma construgao -- a varidvel -- que pode ser usada para armazenar os resultados dessas equacdes matematicas. Varidveis fornecem uma maneira de armazenar qualquer tipo de dado enquanto o script est sendo executado. \Varidveis representam partes da meméria disponiveis ao script durante sua execuc3o. Com essa finalidade, vocé pode pensar em meméria de computador como sendo uma série de pequenos compartimentos. Uma variavel nada mais ¢ do que um desses compartimentos com um rétulo identificador anexado. Vocé pode armazenar qualquer tipo de dado nesse compartimento e ter certeza de que o VBScript poderé recuperar os dados se necessério. Quando vocé desejar fazer referéncia a esses dados, 0 VBScript simplesmente procurard o endereco da memdria e relatara as informacées la armazenadas. Usando variaveis Como outras linguagens de script comuns, as variaveis do VBScript podem ser criadas e usadas imediatamente em qualquer ponto de um script. Vocé néo precisa se preocupar em declarar ou inicializar uma variavel antes de usé-la. (Por outro lado, ha algumas vantagens em declarar e inicializar varidveis antes de usé-las. Para obter detalhes, consulte System Administration Scripting Guide.) Na linha 3 da listagem 3, uma varidvel chamada FreeMegabytes é usada para armazenar os resultados da divisdo de FreeSpace por 1048576 (0 valor necessario para converter bytes em megabytes). Assim que a linha 3 for executada, a variavel FreeMegabytes assumird 0 valor dessa equacdo. Se for necessario fazer referéncia a0 numero de megabytes de espace livre em disco em qualquer outro local do script, voc no precisard repetir essa equac30. Em vez disso, simplesmente faca referéncia & varidvel FreeMegabytes. Isso é mostrado na linha 4, onde o valor da varidvel é exibido para a tela Listagem 3 Usando vai 1 Set objwmiService = GetObject("winmgmts:") 2 Set objLogicalDisk = objwmiService.Get("Win32_LogicalDisk.DevicelD='C: 3 FreeMegaBytes = objLogicalDisk.FreeSpace / 1048576 4 WScript.Echo FreeMegaB ytes A Figura 2 mostra o valor relatado como megabytes, ve ‘igura 2 Observacao A equacao usou o ntimero 1048576 e ndo o ntimero 1.048.576 (com pontos para separar os milhares). Vocé ndo pode user pontos ou qualquer outro caractere para separar milhares no VBScript. Em vez disso, vocé deve executar todos os digitos juntos, Isso se aplica a numeros embutidos em cédigo no script, bem como numeros inseridos como um argumento de linha de comando ou como resposta a qualquer tipo de solicitagao. Provavelmente, o valor 10340.4458007813 (significando 10.340 megabytes de espaco, livre) 6 muito mais significative para o administrador de sistema tipico do que o valor 10842824704. Porém, pode-se argumentar que os nuimeros apés 0 ponto decimal n3o contém muitas informagées uteis. Felizmente, o VBScript fornece varias maneiras diferentes para vocé modificar os dados armazenados em variaveis. Por exemplo, a func Int retorna a parte inteira de um numero, deixando de fora todos os digitos apés 0 ponto decimal. Portanto, vocé pode usar a funco Int para modificar 0 valor decimal armazenado no compartimento FreeMegaBytes, conforme mostrado na linha 4 da listagem 4. Listagem 4 Modificando variaveis 1 Set objwmiService = GetObject("winmgmts:") 2 Set abjLogicalDisk = objWmiService.Get("Win32_LogicalDisk.DevicelD='C: 3 FreeMegaBytes = objLogicalDisk.FreeSpace / 1048576 4 FreeMegaBytes = Int(FreeMegaB ytes) 5 WScript.cho FreeMegaB ytes ‘A funcdo Int recupera o valor decimal original, descarta todos os digitos apds 0 panto decimal e retorna somente a parte inteira arredondada do numero, que sobrescreve o valor original armazenado no compartimento FreeMegaB ytes (varidvel). Quando o script da listagem 4 for executado, FreeMegaBytes sera relatado como um numero inteiro, conforme mostrado na figura 3, ura 3 Constantes No script mostrado na listagem 3, a quantidade de megabytes livres é calculada através da diviso do valor da propriedade FreeSpace pelo valor embutido em cédigo 1048576 (valores embutidos em cédigo como esse so chamados de literais, pois representam literalmente o valor e no variaveis) Em um script pequeno como esse (especialmente, um script pequeno escrito para seu préprio uso), valores literais embutidos em cédigo no apresentam problemas. Porém,

You might also like