none
script verifica utilização de disco RRS feed

  • Pergunta

  • Bom dia pessoal,

    Gostaria de uma ajuda de vocês, preciso de um script que forneça as seguintes informações:

    tamanho do disco em GB

    ocupação do disco em GB

    Espaço livre do disco em GB ou MB dependendo do que estiver livre no momento.

    Esta verificação deve ser feita em todas as unidades que este servidor possuir. Eu tenho um script aqui comigo mas ele envia para a tela essas informações, precisava que ao invés de exibir na tela fossem enviadas via e-mail, segue o script para análise de vocês:

    strComputer="." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
    Set colItems = objWMIService.ExecQuery("Select SystemName,DeviceID,Size,FreeSpace, DriveType from Win32_LogicalDisk WHERE DriveType=3",,48)    
    wscript.echo "Computador - Unidade  Total   Livre   Utilizado"  
    For Each objItem in colItems  
      if err.number=0 then  
    qtdUtilizada=Replace(Round((objItem.Size - objItem.FreeSpace)/1024/1024/1024,2),",",".")  
    Wscript.echo "    " & objItem.SystemName & " - " &  objItem.DeviceID & _  
    vbtab & round((objItem.Size/1024/1024/1024),2) & "GB" &_  
    vbtab & round((objItem.FreeSpace/1024/1024/1024),2) & "GB" &_  
    vbtab & qtdUtilizada  
    end if  
    err.clear  
    Next  

    quinta-feira, 14 de outubro de 2010 11:34

Respostas

  • Mauro,

    Em nós do cluster costumam ficar alguns discos indisponiveis (é porque está disponivel no outro)

    adicione a linha abaixo no inicio do arquivo de script para ignorar os erros

    on error resume next

    Outra alternativa seria tratar os erros mas acredito que isto já resolve o seu problema.


    Fábio de Paula Junior
    • Marcado como Resposta mauroserggio sexta-feira, 15 de outubro de 2010 15:39
    sexta-feira, 15 de outubro de 2010 14:03
    Moderador

Todas as Respostas

  • Mauro,

    Substitua o wscript.echo por uma variavel (strMensagem) e depois utilize um script de envio de e-mail para mandar os dados desta variavel.

    Alteração da linha que inicia com wscript.echo:

    strMensagem = strMensagem &  "    " & objItem.SystemName & " - " &  objItem.DeviceID & _  
    vbtab & round((objItem.Size/1024/1024/1024),2) & "GB" &_  
    vbtab & round((objItem.FreeSpace/1024/1024/1024),2) & "GB" &_  
    vbtab & qtdUtilizada & chr(13)

    Veja que a variavel vai adicionando cada linha e no final de cada linha eu adicionei o chr(13) para ter uma quebra de linha.

    Script para enviar e-mail:

    http://social.technet.microsoft.com/Forums/pt-BR/scriptadminpt/thread/870db96f-4fac-4f8e-819f-66693da25612 


    Fábio de Paula Junior
    quinta-feira, 14 de outubro de 2010 12:21
    Moderador
  • Fiz como você disse mas não funcionou, envio aqui o script para que possa ver:

     

    strComputer="." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
    Set colItems = objWMIService.ExecQuery("Select SystemName,DeviceID,Size,FreeSpace, DriveType from

    Win32_LogicalDisk WHERE DriveType=3",,48)    
    strMensagem "Computador - Unidade  Total   Livre   Utilizado"  
    For Each objItem in colItems  
      if err.number=0 then  
    qtdUtilizada=Replace(Round((objItem.Size - objItem.FreeSpace)/1024/1024/1024,2),",",".")  
    strMensagem = strMensagem &  "    " & objItem.SystemName & " - " &  objItem.DeviceID & _  
    vbtab & round((objItem.Size/1024/1024/1024),2) & "GB" &_  
    vbtab & round((objItem.FreeSpace/1024/1024/1024),2) & "GB" &_  
    vbtab & qtdUtilizada & chr(13)  
    end if  
    err.clear  
    Next 

    quinta-feira, 14 de outubro de 2010 15:51
  • De cara tem um erro na linha

    strMensagem "Computador - Unidade  Total   Livre   Utilizado" 

    Está faltando o "="

    strMensagem =  "Computador - Unidade  Total   Livre   Utilizado" 

     

    Modifique, se der outro erro coloque o erro aqui também.


    Fábio de Paula Junior
    quinta-feira, 14 de outubro de 2010 17:29
    Moderador
  • Fábio, obrigado, pela correção, realmente não havi apercebido, fiz z alteração não dá mais o erro, mas não recebo o e-mail, segue como o script está agora:

     

    strComputer="." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
    Set colItems = objWMIService.ExecQuery("Select SystemName,DeviceID,Size,FreeSpace, DriveType from

    Win32_LogicalDisk WHERE DriveType=3",,48)    
    strMensagem = "Computador - Unidade  Total   Livre   Utilizado"  
    For Each objItem in colItems  
      if err.number=0 then  
    qtdUtilizada=Replace(Round((objItem.Size - objItem.FreeSpace)/1024/1024/1024,2),",",".")  
    strMensagem = strMensagem &  "    " & objItem.SystemName & " - " &  objItem.DeviceID & _  
    vbtab & round((objItem.Size/1024/1024/1024),2) & "GB" &_  
    vbtab & round((objItem.FreeSpace/1024/1024/1024),2) & "GB" &_  
    vbtab & qtdUtilizada & chr(13)  
    end if  
    err.clear  
    Next  

    Sub Envia_Alerta(nEspaco)
     Set objEmail = CreateObject("CDO.Message")

    'COLOQUE AQUI OS ENDEREÇOS DE EMAIL
     objEmail.From = "email@email.com.br"
     objEmail.To = "email@email.com.br"

     objEmail.Subject = "ALERTA DE UTILIZAÇAO DE DISCO COMPUTADOR " & strNome
     objEmail.TextBody = "Computador: " & strNome & " Disco: " & objDisk.DeviceID & "Espaço Disponivel:

    " & nEspaco & " %"

     objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

    'COLOQUE AQUI O IP DO SERVIDOR DE EMAIL
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "10.10.0.1" '<-informe seu

    servidor smtp

     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
     objEmail.Configuration.Fields.Update
     objEmail.Send
    end sub

    quinta-feira, 14 de outubro de 2010 17:39
  • Vamos por partes

    1) Me desculpe, pedi para utilizar o chr(13) para quebrar a linha, mas o correto é utilizar a contante vbCrLf

    vbtab & qtdUtilizada & chr(13) -> troque por -> vbtab & qtdUtilizada & vbCrLf

    2)Muito bem você adicionou a função que envia e-mail mas não chamou ela. No seu script antes da linha "Sub Envia_Alerta(nEspaco)" escreva "Envia_Alerta(strMensagem)"

    Isto chama a SUB e passa como parametro o conteudo da variavel strMensagem.

    3) Confira os parametros da SUB

    - "10.10.0.1" é o seu endereço do servidor de correio???

    - Esta linha esta correta>  objEmail.Subject = "ALERTA DE UTILIZAÇAO DE DISCO COMPUTADOR " & strNome > qual o valor desta variavel strNome??

     

    Faça as alterações, se continuar não funcionando cole o código aqui para eu verificar.

     

     


    Fábio de Paula Junior
    quinta-feira, 14 de outubro de 2010 20:09
    Moderador
  • Fiz como sugeriu, mas continuo com erro:

    Linha:25

    caract.2

    erro: objeto necessário: 'objdisk'

    Segue o script:

    strComputer="." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
    Set colItems = objWMIService.ExecQuery("Select SystemName,DeviceID,Size,FreeSpace, DriveType from

    Win32_LogicalDisk WHERE DriveType=3",,48)    
    strMensagem = "Computador - Unidade  Total   Livre   Utilizado"  
    For Each objItem in colItems  
      if err.number=0 then  
    qtdUtilizada=Replace(Round((objItem.Size - objItem.FreeSpace)/1024/1024/1024,2),",",".")  
    strMensagem = strMensagem &  "    " & objItem.SystemName & " - " &  objItem.DeviceID & _  
    vbtab & round((objItem.Size/1024/1024/1024),2) & "GB" &_  
    vbtab & round((objItem.FreeSpace/1024/1024/1024),2) & "GB" &_  
    vbtab & qtdUtilizada & vbCrLf
    end if  
    err.clear  
    Next  

    Envia_Alerta(strMensagem)
    Sub Envia_Alerta(nEspaco)
     Set objEmail = CreateObject("CDO.Message")

    'COLOQUE AQUI OS ENDEREÇOS DE EMAIL
     objEmail.From = "suporte@verdesmares.com.br"
     objEmail.To = "maurosergio@diariodonordeste.com.br"

     objEmail.Subject = "ALERTA DE UTILIZAÇAO DE DISCO" & strMensagem
     objEmail.TextBody = "Computador: " & strNome & " Disco: " & objDisk.DeviceID & "Espaço Disponivel: " &

    nEspaco & " %"

     objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

    'COLOQUE AQUI O IP DO SERVIDOR DE EMAIL
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "172.17.0.2" '<-informe seu servidor smtp

     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
     objEmail.Configuration.Fields.Update
     objEmail.Send
    end sub

    sexta-feira, 15 de outubro de 2010 10:02
  • Deu erro porque o objeto que vc utilizou não for criado dentro da SUB.

    Substitui a linha onde dava erro por uma que utiliza o parametro que foi passado na chamada da SUB

    strComputer="." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
    Set colItems = objWMIService.ExecQuery("Select SystemName,DeviceID,Size,FreeSpace, DriveType from Win32_LogicalDisk WHERE DriveType=3",,48)   
    strMensagem = "Computador - Unidade Total  Livre  Utilizado" & vbCrLf
     
    For Each objItem in colItems  
     if err.number=0 then  
    qtdUtilizada=Replace(Round((objItem.Size - objItem.FreeSpace)/1024/1024/1024,2),",",".")  
    strMensagem = strMensagem & "  " & objItem.SystemName & " - " & objItem.DeviceID & _  
    vbtab & round((objItem.Size/1024/1024/1024),2) & "GB" &_  
    vbtab & round((objItem.FreeSpace/1024/1024/1024),2) & "GB" &_  
    vbtab & qtdUtilizada & vbCrLf
    end if  
    err.clear  
    Next 
    
    Envia_Alerta(strMensagem)
    Sub Envia_Alerta(nEspaco)
     Set objEmail = CreateObject("CDO.Message")
    
    'COLOQUE AQUI OS ENDEREÇOS DE EMAIL
     objEmail.From = "suporte@verdesmares.com.br"
     objEmail.To = "maurosergio@diariodonordeste.com.br"
    
     objEmail.Subject = "ALERTA DE UTILIZAÇAO DE DISCO" & strMensagem
     objEmail.TextBody = nEspaco
    
     objEmail.Configuration.Fields.Item _
       ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    
    'COLOQUE AQUI O IP DO SERVIDOR DE EMAIL
     objEmail.Configuration.Fields.Item _
       ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "172.17.0.2" '<-informe seu servidor smtp
    
     objEmail.Configuration.Fields.Item _
       ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
     objEmail.Configuration.Fields.Update
     objEmail.Send
    end sub
    
    

    Fábio de Paula Junior
    sexta-feira, 15 de outubro de 2010 11:23
    Moderador
  • Fábio, deu certo rodando em meu micro, quando inseri o script no servidor ele me retornou um erro:

    linha:8

    caract.1

    error: invalid use of null:'round'

    code:800a005e

     

    se eu rodar ele no meu micro ele roda na boa, só quando vou rodar ele no servidor que aparece esse erro.

     

    Desculpe-me, talvez realmente não funcinone pois os discos estão em um storage e este servidor é um cluster.

    sexta-feira, 15 de outubro de 2010 12:07
  • Mauro,

    Em nós do cluster costumam ficar alguns discos indisponiveis (é porque está disponivel no outro)

    adicione a linha abaixo no inicio do arquivo de script para ignorar os erros

    on error resume next

    Outra alternativa seria tratar os erros mas acredito que isto já resolve o seu problema.


    Fábio de Paula Junior
    • Marcado como Resposta mauroserggio sexta-feira, 15 de outubro de 2010 15:39
    sexta-feira, 15 de outubro de 2010 14:03
    Moderador