Listagem 13 Obtendo entrada de usuario
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 EndIf
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(FreeMegaB ytes)
17 If FreeMegaBytes < WARNING_THRESHOLD Then
18 WScript.Echo Computer & "
19" tem pouco espaco em disco."
20 End If
21 Next
22
& objLogicalDisk.DevicelD & _
23Next
Uma vantagem em usar argumentos é 0 fato de que eles so colocados
automaticamente em uma colecdo (Wscript.Arguments). Isso torna mais facil percorrer
05 argumentos fornecidos a um script: vocé simplesmente configura um loop For Each
e itera cada argumento da colecdo, exatamente da mesma forma como itera as
unidades de disco individuais em uma colegdo de unidades de disco.
Como argumentos so colocados em uma colec3o, também ¢ facil 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 (0 nimero de argumentos fornecido sera igual ao nimero de itens da
coleco de argumentos). Se a contagem for igual a 0, significando que nenhum.
argumento foi fornecide, um conjunto de instrugdes de utilizagao sera exibido eo
script sera finalizado (com 0 método Wscript.Quit)Tratamento de erros
O script mostrado na listagem 13 bastante arriscado. Digamos que o usudrio tenha
inserido um nome de servidor invalido como um argumento. Quando o script tentar se
conectar a esse computador inexistente, falhara e a mensagem de erro "The remote
server machine does not exist or is unavailable" sera exibida.
Claro que uma determinada porcentagem de risco é inerente a todos os scripts usados
até 0 momento neste artigo, incluindo os scripts em que os nomes de computador
foram embutidos em cédigo. Afinal, o script n3o pode distinguir entre um nome de
computador invalido e um nome de computador valido que, por algum mative, ndo
est disponivel 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, 0
script falhara e ndo sera mais processado. Isso significa que vocé nao sé falhar ao
recuperar 0 espaco livre em disco no computador ati-de-01, como também falhara ao
Tecuperar 0 espaco livre em disco nos computadores atl-dc-02 e atl-de-03, mesmo que
eles estejam conectados a rede e funcionando corretamente, Isso acorre pois o script é
finalizado antes de tentar se conectar a atl-dc-02 ou atl-de-03.
‘A incapacidade em se conectar a0 computador atl-de-01 ¢ um exemplo de erro em
tempo de execugao, que ocorre apés o script ter sido iniciado (por comparacdo, um
erro de sintaxe, como uma palavra-chave incorreta, 6 gerado e o script é finalizado
antes que as linhas de cédigo sejam de fato executadas). Para obter ajuda na protecao
contra erros em tempo de execucSo, vocé pode incluir a instrugo 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 execucdo. Com o tratamento de erros, o script ndo ¢ finalizado, em
vez disso, ele tanta 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 execucao. Porém, isso pode causar pelo menos dois problemas. Por um
lado, nenhuma mensagem de erro é gerada para informar que ocorrau erro. Se
executar um script e nada ocorrer, vocé nao terd como saber onde houve falha,Por outro lado, talvez vocé prefira que um script no tente executar todas as linhas
caso acorra erro em tempo de execucdo. Por exemplo, considere um script que siga
este procedimento:
Conecta-se a um computador remato.
is
Copia um conjunto de arquivos do computador local para 0 computador remoto.
3. Exclui o conjunto de arquives original do computador local
Digamos que vocé tenha executado esse script, mas que o computador remoto no
esteja disponivel. Veja a seguir uma sequiéncia possivel de eventos.
1. O script tenta se conectar a0 computador remoto e falha. Porém, On Error
Resume Next assegura que o script continue sendo executado.
is
O script tenta copiar arquivos para o computador remoto. A operacao falha,
pois 0 computador remoto ndo esté acessivel
3. O script exclui os arquivos do computador local. Infelizmente, essa aco ¢ bem-
sucedida, pois o computador local esté disponivel. Como resultado, os arquivos
so excluidos do computador local, mas ndo so copiados para o computador
remoto.
Felizmente, vocé pode usar 0 objeto Err intrinseco do VBScript para determinar se 0
erro ocorreu ou no, e caso tenha ocorrido, para executar a acdo apropriada.
0 objeto Err & criado automaticamente sempre que vocé executa um script (ha
somente um objeto Err por instncia de script). Esse objeto contém varias
propriedades, incluindo as trés mostradas na tabela 4. Sempre que o script encontra
um erro em tempo de execugdo, essas propriedades sao preenchidas automaticamente
com as informagées que identificam o erro.
Tabela 4
Propriedade Descricéo
Description Descrig&o do erro. A descricao pode ser usada para informar ao
usuario que ocorreu erro. Isso pode ser realizado com o eco do
valor:
Wscript.Echo Err.Description
Number Numero intairo que identifica de forma exclusiva 0 erro ocorrido.
Esse ntimero pode representar um numero de erro intrinseco do