• Nenhum resultado encontrado

Obtendo entrada de usuário 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 espaço em disco."

20 End If 21 Next 22 23Next

Uma vantagem em usar argumentos é o fato de que eles são colocados

automaticamente em uma coleção (Wscript.Arguments). Isso torna mais fácil percorrer os argumentos fornecidos a um script: você simplesmente configura um loop For Each e itera cada argumento da coleção, exatamente da mesma forma como itera as unidades de disco individuais em uma coleção de unidades de disco.

Como argumentos são colocados em uma coleção, também é fácil 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 número de argumentos fornecido será igual ao número de itens da

coleção de argumentos). Se a contagem for igual a 0, significando que nenhum argumento foi fornecido, um conjunto de instruções de utilização será exibido e o script será finalizado (com o método Wscript.Quit).

Tratamento de erros

O script mostrado na listagem 13 é bastante arriscado. Digamos que o usuário tenha inserido um nome de servidor inválido 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 código. Afinal, o script não pode distinguir entre um nome de computador inválido e um nome de computador válido que, por algum motivo, não está disponível 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 não será mais processado. Isso significa que você não só falhará ao recuperar o espaço livre em disco no computador atl-dc-01, como também falhará ao recuperar o espaço 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 execução, que ocorre após o script ter sido iniciado (por comparação, um erro de sintaxe, como uma palavra-chave incorreta, é gerado e o script é finalizado antes que as linhas de código sejam de fato executadas). Para obter ajuda na proteção contra erros em tempo de execução, você pode incluir a instrução 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 execução. Com o tratamento de erros, o script não é 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 não 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 execução. Porém, 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ê não terá como saber onde houve falha.

Por outro lado, talvez você prefira que um script não tente executar todas as linhas caso ocorra erro em tempo de execução. 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 não esteja disponível. Veja a seguir uma seqüência possível de eventos.

1. O script tenta se conectar ao computador remoto e falha. Porém, On Error Resume Next assegura que o script continue sendo executado.

2. O script tenta copiar arquivos para o computador remoto. A operação falha, pois o computador remoto não está acessível.

3. O script exclui os arquivos do computador local. Infelizmente, essa ação é bem-sucedida, pois o computador local está disponível. Como resultado, os arquivos são excluídos do computador local, mas não são copiados para o computador remoto.

Felizmente, você pode usar o objeto Err intrínseco do VBScript para determinar se o erro ocorreu ou não, e caso tenha ocorrido, para executar a ação apropriada.

O objeto Err é criado automaticamente sempre que você executa um script (há somente um objeto Err por instância de script). Esse objeto contém várias

propriedades, incluindo as três mostradas na tabela 4. Sempre que o script encontra um erro em tempo de execução, essas propriedades são preenchidas automaticamente com as informações que identificam o erro.

Tabela 4

Propriedade Descrição

Description Descrição do erro. A descrição pode ser usada para informar ao usuário que ocorreu erro. Isso pode ser realizado com o eco do valor:

Wscript.Echo Err.Description

Number Número inteiro que identifica de forma exclusiva o erro ocorrido.

Esse número pode representar um número de erro intrínseco do

VBScript ou um número de erro derivado de um objeto de automação (números de erro do objeto de automação são conhecidos como SCODE, abreviatura para código de status).

Para determinar a origem do número de erro, use a propriedade Source.

Source Nome da classe ou identificador programático (ProgID) do objeto que causou o erro. Normalmente, quando o VBScript é

responsável pelo erro, a mensagem "Microsoft VBScript runtime error" é exibida como a origem. Se um objeto de automação for responsável pelo erro, você verá o ProgID (por exemplo,

"Word.Application").

Quando um script é iniciado, o valor padrão 0 (sem erros) é atribuído à 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 após tentar se conectar a um computador remoto. Se Err.Number for igual a 0, nenhum erro terá ocorrido. Se Err.Number não for igual a zero, terá ocorrido algum tipo de erro e você poderá supor que a tentativa de conexão com o computador remoto falhou. Como resultado, o script executará uma ação com base no fato de que o computador remoto não estava disponível.

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 instrução 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 não está acessível? Conforme observado, na linha 12 o script tenta se conectar a um desses servidores remotos. Se a conexão for bem-sucedida, nenhum erro será gerado, significando que Err.Number permanecerá igual a 0. Porém, se a conexão falhar, um erro será gerado e Err.Number será alterado para refletir o número atribuído ao erro.

Se a tentativa de conexão 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 próximo nome de servidor. Se o valor for 0, isso significa que a conexão foi bem-sucedida. Em seguida, o script

recupera o espaço livre em disco do computador remoto.

Listagem 14 Tratamento de erros

Documentos relacionados