Eu queria saber se existe 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 quase sem espaço em disco devido aos arquivos de log do banco de dados.
Obrigado Ryan
Respostas:
Uma maneira simples de fazer com que o Windows Server 2008 envie alertas por 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 \ Parameters \ DiskSpaceThreshold , um evento será registrado no log do sistema que pode acionar uma tarefa para enviar uma mensagem de email.
fonte
powershell
o programa e o seguinte para obter argumentos:-command &{send-mailmessage -from [email protected] -to [email protected] -subject 'Alert from Task Scheduler' -body 'This is an automated message from a task scheduled on the server. Testing powershell email.' -smtpserver x.x.x.x}
Adicionei monitoramento de espaço em disco via snmp à minha instância (separada) do nagios.
fonte
Por que você não executa um script do PowerShell como uma tarefa de agendamento todos os dias? Se o script descobrir que o espaço livre do disco é inferior a 10%, ele enviará um email ou 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" | ForEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
fonte
Ambos os 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):
O código a seguir lista os tamanhos de volume dos hosts listados em server.txt :
Nota
Observe que o espaço reservado externo
$_
enumera os endereços do servidor, enquanto o espaço reservado interno$_
enumera os dispositivos. Essa é uma tarefa frequente para iniciantes no PowerShell. Se você quiser usar o endereço do servidor no loop interno, precisará atribuí-lo a uma nova variável no loop externo.O software do fórum usado aqui é falho. Nas pré-visualizações de post, ele é exibido
$_
corretamente como um$_
código mesmo que não seja escapado. Mas a postagem final remove o sublinhado, tornando os exemplos do PowerShell incorretos.fonte
Get-WmiObject win32_logicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB }
mas sendo um novato em PS, não entendo bem qual seria o próximo passo para automatizar isso (exemplo: como tirar a saída do primeiro comando e se o comando a unidade estava abaixo de algum limite de espaço, conecte um comando PS para enviar e enviar por e-mail.Vejo que o e-mail pode ser enviado de uma postagem pelo boadad acima usando,-command &{send-mailmessage ...
mas sem saber como conectar o seu à lógica que determina que o espaço é baixo, o e-mail precisa ser enviado Thx.Você pode usar esse script para enviar um email usando seu servidor de email. 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 se encontra aqui: https://gallery.technet.microsoft.com/scriptcenter/Disk-Space-Report-Reports-98e64d65
Depois que o script é salvo na unidade local, ele pode ser executado facilmente usando o powershell e testado. Quando o script parece funcionar bem, pode ser agendado para ser executado todos os dias ou a cada hora, com base nos requisitos, usando o agendador de tarefas do Windows. Este artigo explica como executar um script usando o agendador de tarefas. https://www.metalogix.com/help/Content%20Matrix%20Console/SharePoint%20Edition/002_HowTo/004_SharePointActions/012_SchedulingPowerShell.htm
fonte
Eu corrigi o script. Basta criar um arquivo de texto chamado por exemplo server.txt e incluir o endereço IP ou servernames e, em seguida, você pode executar o seguinte script
Get-Content server.txt | objeto de pesquisa {Get-WmiObject -ComputerName 192.168.22.208 win32_logicalDisk -filter "DriveType = 3" | ForEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
Atenciosamente, Luis.
fonte
Get-Content server.txt | objeto de pesquisa {Get-WmiObject -ComputerName xx.xx.xx.xx win32_logicalDisk -filter "DriveType = 3" | forEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
fonte