Definindo Alertas de Pouco Espaço em Disco no Windows Server 2008

29

Eu queria saber se há uma maneira fácil de acionar um alerta de email no Windows Server 2008 quando qualquer partição de disco lógico ficar com pouco espaço. Eu tenho 2 servidores SQL que estão perto de ficar sem espaço em disco por causa dos arquivos de log do banco de dados.

Obrigado Ryan

    
por rmwetmore 14.01.2010 / 17:48

7 respostas

37

Uma maneira simples de obter o Windows Server 2008 para enviar alertas de email com pouco espaço em disco é usar o Agendador de Tarefas e o Log do Sistema. Se o espaço livre ficar abaixo da porcentagem especificada em HKLM \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parâmetros \ DiskSpaceThreshold , um evento é registrado no log do sistema que pode acionar uma tarefa para enviar uma mensagem de email.

  1. Abra o Agendador de tarefas e crie uma nova tarefa.
  2. Insira um nome para a tarefa, selecione "Executar se o usuário está conectado ou não" e marque a opção "Não armazenar senha".
  3. Adicione um novo acionador na guia "Acionadores".
  4. Selecione "Em um evento" na caixa "Começar a tarefa".
  5. Defina Log como "System", Source como "srv" e Event ID como "2013".
  6. Adicione uma nova ação na guia Ações.
  7. Defina Ação para "Enviar um e-mail" e preencha o restante das configurações adequadamente.
  8. Para configurar quando o evento de pouco espaço em disco é registrado no Log do sistema, abra o Editor do Registro, navegue até HKLM \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parâmetros e adicione um valor DWORD chamado “DiskSpaceThreshold”, definindo-o como percentual desejado. Quando a entrada não existe, o valor padrão é 10.
por 15.10.2010 / 17:01
1

Eu adicionei o monitoramento do espaço em disco via snmp à minha instância nagios (separada).

    
por 14.01.2010 / 17:51
1

Por que você não executa um script PowerShell como uma tarefa de agendamento todos os dias? Se o script achar que o espaço livre do disco é menor que 10%, ele enviará um e-mail ou uma notificação.

aqui está um código de exemplo para verificar o espaço livre dos discos:

Get-Content ForEach-Object {   $ ; Get-WMIObject –computername $   Win32_LogicalDisk -filter "DriveType = 3" Voltar para o início |   ForEach-Object {     $ .DeviceID; $ .FreeSpace / 1GB   } }

    
por 18.01.2010 / 17:26
1

Os dois exemplos não funcionam devido à sintaxe incorreta do PowerShell. O código a seguir lista os tamanhos de volume do host atual (usando o PowerShell 5.0):

Get-WmiObject win32_logicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB }

O código a seguir lista os tamanhos de volume dos hosts listados em server.txt :

Get-Content server.txt | %{ Get-WMIObject –computername $_ Win32_LogicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB } }

Sidenote

Observe que o espaço reservado externo $_ enumera os endereços do servidor, enquanto o espaço reservado interno $_ enumera os dispositivos. Essa é uma pegadinha frequente para novatos do PowerShell. Se você quisesse usar o endereço do servidor no loop interno, teria que atribuí-lo a uma nova variável no loop externo.

O software do fórum usado aqui é falho. Em pré-visualizações, exibe $_ corretamente como $_ , mesmo que não tenha escapado como código. Mas a postagem final remove o sublinhado, tornando os exemplos do PowerShell incorretos.

    
por 28.06.2017 / 09:29
0

Você pode usar esse script para enviar um e-mail usando seu servidor de e-mail. Apenas substitua o nome do servidor smtp pelo nome do seu servidor. Se na mesma máquina, use "localhost" (o servidor smtp deve estar funcional). O script também é encontrado aqui: link

Depois que o script é salvo na unidade local, ele pode ser facilmente executado usando o powershell e testado. Uma vez que o script parece funcionar bem, então ele pode ser agendado para ser executado todos os dias ou a cada hora com base no requisito usando o agendador de tarefas do Windows. Este artigo explica como executar um script usando o agendador de tarefas. link

############################################################################# 
#                                                                                                                                                     # 
#  Check disk space and send an HTML report as the body of an email.                                                   # 
#  Reports only disks on computers that have low disk space.                                                                 # 
#  Author: Mike Carmody                                                                                                                   # 
#  Some ideas extracted from Thiyagu's Exchange DiskspaceHTMLReport module.                                  # 
#  Date: 8/10/2011                                                          # 
#  I have not added any error checking into this script yet.                # 
#                                                                           # 
#                                                                           # 
############################################################################# 
# Continue even if there are errors 
$ErrorActionPreference = "Continue"; 

######################################################################################### 
# Items to change to make it work for you. 
# 
# EMAIL PROPERTIES 
#  - the $users that this report will be sent to. 
#  - near the end of the script the smtpserver, From and Subject. 

# REPORT PROPERTIES 
#  - you can edit the report path and report name of the html file that is the report.  
######################################################################################### 

# Set your warning and critical thresholds 
$percentWarning = 15; 
$percentCritcal = 10; 

# EMAIL PROPERTIES 
 # Set the recipients of the report. 
  $users = "[email protected]" 
    #$users = "[email protected]" # I use this for testing by uing my email address. 
  #$users = "[email protected]", "[email protected]", "[email protected]";  # can be sent to individuals. 


# REPORT PROPERTIES 
 # Path to the report 
  $reportPath = "D:\Jobs\DiskSpaceQuery\Reports\"; 

 # Report name 
  $reportName = "DiskSpaceRpt_$(get-date -format ddMMyyyy).html"; 

# Path and Report name together 
$diskReport = $reportPath + $reportName 

#Set colors for table cell backgrounds 
$redColor = "#FF0000" 
$orangeColor = "#FBB917" 
$whiteColor = "#FFFFFF" 

# Count if any computers have low disk space.  Do not send report if less than 1. 
$i = 0; 

# Get computer list to check disk space 
$computers = Get-Content "servers_c.txt"; 
$datetime = Get-Date -Format "MM-dd-yyyy_HHmmss"; 

# Remove the report if it has already been run today so it does not append to the existing report 
If (Test-Path $diskReport) 
    { 
        Remove-Item $diskReport 
    } 

# Cleanup old files.. 
$Daysback = "-7" 
$CurrentDate = Get-Date; 
$DateToDelete = $CurrentDate.AddDays($Daysback); 
Get-ChildItem $reportPath | Where-Object { $_.LastWriteTime -lt $DatetoDelete } | Remove-Item; 

# Create and write HTML Header of report 
$titleDate = get-date -uformat "%m-%d-%Y - %A" 
$header = " 
  <html> 
  <head> 
  <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'> 
  <title>DiskSpace Report</title> 
  <STYLE TYPE='text/css'> 
  <!-- 
  td { 
   font-family: Tahoma; 
   font-size: 11px; 
   border-top: 1px solid #999999; 
   border-right: 1px solid #999999; 
   border-bottom: 1px solid #999999; 
   border-left: 1px solid #999999; 
   padding-top: 0px; 
   padding-right: 0px; 
   padding-bottom: 0px; 
   padding-left: 0px; 
  } 
  body { 
   margin-left: 5px; 
   margin-top: 5px; 
   margin-right: 0px; 
   margin-bottom: 10px; 
   table { 
   border: thin solid #000000; 
  } 
  --> 
  </style> 
  </head> 
  <body> 
  <table width='100%'> 
  <tr bgcolor='#CCCCCC'> 
  <td colspan='7' height='25' align='center'> 
  <font face='tahoma' color='#003399' size='4'><strong>AEM Environment DiskSpace Report for $titledate</strong></font> 
  </td> 
  </tr> 
  </table> 
" 
 Add-Content $diskReport $header 

# Create and write Table header for report 
 $tableHeader = " 
 <table width='100%'><tbody> 
 <tr bgcolor=#CCCCCC> 
    <td width='10%' align='center'>Server</td> 
 <td width='5%' align='center'>Drive</td> 
 <td width='15%' align='center'>Drive Label</td> 
 <td width='10%' align='center'>Total Capacity(GB)</td> 
 <td width='10%' align='center'>Used Capacity(GB)</td> 
 <td width='10%' align='center'>Free Space(GB)</td> 
 <td width='5%' align='center'>Freespace %</td> 
 </tr> 
" 
Add-Content $diskReport $tableHeader 

# Start processing disk space reports against a list of servers 
  foreach($computer in $computers) 
 {  
 $disks = Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk -Filter "DriveType = 3" 
 $computer = $computer.toupper() 
  foreach($disk in $disks) 
 {         
  $deviceID = $disk.DeviceID; 
        $volName = $disk.VolumeName; 
  [float]$size = $disk.Size; 
  [float]$freespace = $disk.FreeSpace;  
  $percentFree = [Math]::Round(($freespace / $size) * 100, 2); 
  $sizeGB = [Math]::Round($size / 1073741824, 2); 
  $freeSpaceGB = [Math]::Round($freespace / 1073741824, 2); 
        $usedSpaceGB = $sizeGB - $freeSpaceGB; 
        $color = $whiteColor; 

# Set background color to Orange if just a warning 
 if($percentFree -lt $percentWarning)       
  { 
    $color = $orangeColor  

# Set background color to Orange if space is Critical 
      if($percentFree -lt $percentCritcal) 
        { 
        $color = $redColor 
       }         

 # Create table data rows  
    $dataRow = " 
  <tr> 
        <td width='10%'>$computer</td> 
  <td width='5%' align='center'>$deviceID</td> 
  <td width='15%' >$volName</td> 
  <td width='10%' align='center'>$sizeGB</td> 
  <td width='10%' align='center'>$usedSpaceGB</td> 
  <td width='10%' align='center'>$freeSpaceGB</td> 
  <td width='5%' bgcolor=''$color'' align='center'>$percentFree</td> 
  </tr> 
" 
Add-Content $diskReport $dataRow; 
Write-Host -ForegroundColor DarkYellow "$computer $deviceID percentage free space = $percentFree"; 
    $i++   
  } 
 } 
} 

# Create table at end of report showing legend of colors for the critical and warning 
 $tableDescription = " 
 </table><br><table width='20%'> 
 <tr bgcolor='White'> 
    <td width='10%' align='center' bgcolor='#FBB917'>Warning less than 15% free space</td> 
 <td width='10%' align='center' bgcolor='#FF0000'>Critical less than 10% free space</td> 
 </tr> 
" 
  Add-Content $diskReport $tableDescription 
 Add-Content $diskReport "</body></html>" 

# Send Notification if alert $i is greater then 0 
if ($i -gt 0) 
{ 
    foreach ($user in $users) 
{ 
        Write-Host "Sending Email notification to $user" 

  $smtpServer = "MySMTPServer" 
  $smtp = New-Object Net.Mail.SmtpClient($smtpServer) 
  $msg = New-Object Net.Mail.MailMessage 
  $msg.To.Add($user) 
        $msg.From = "[email protected]" 
  $msg.Subject = "Environment DiskSpace Report for $titledate" 
        $msg.IsBodyHTML = $true 
        $msg.Body = get-content $diskReport 
  $smtp.Send($msg) 
        $body = "" 
    } 
  } 
    
por 25.05.2018 / 08:40
-1

Eu consertei o script. Basta criar um arquivo de texto nomeado para o exemplo server.txt e incluir o endereço IP ou os nomes do servidor e, em seguida, você pode executar o seguinte script

Get-Content server.txt | foreach-object {Get-WmiObject -ComputerName 192.168.22.208 win32_logicalDisk -filtro "DriveType = 3" | ForEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}

Atenciosamente, Luis.

    
por 24.11.2016 / 01:47
-1

Get-Content server.txt | foreach-object {Get-WmiObject -ComputerName xx.xx.xx.xx win32_logicalDisk -filter "DriveType = 3" | forEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}

    
por 05.09.2017 / 16:00