Me preguntaba si hay una manera fácil de activar una alerta de correo electrónico en Windows Server 2008 cuando las particiones de disco lógico tienen poco espacio. Tengo 2 servidores SQL que están a punto de quedarse sin espacio en disco debido a los archivos de registro de la base de datos.
Gracias Ryan
Respuestas:
Una forma sencilla de hacer que Windows Server 2008 envíe alertas de correo electrónico con poco espacio en disco es usar el Programador de tareas y el Registro del sistema. Si el espacio libre cae por debajo del porcentaje especificado en HKLM \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters \ DiskSpaceThreshold , se registra un evento en el registro del sistema que puede activar una tarea para enviar un mensaje de correo electrónico.
fuente
powershell
el programa y lo siguiente para los 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}
Agregué monitoreo de espacio en disco a través de snmp a mi instancia de nagios (separada).
fuente
¿Por qué no ejecuta un script de PowerShell como una tarea programada todos los días? Si el script encuentra que el espacio libre del disco es inferior al 10%, le enviará un correo electrónico o una notificación.
Aquí hay un código de ejemplo para verificar el espacio libre de los discos:
Get-Content ForEach-Object {$ ; Get-WMIObject –computername $ Win32_LogicalDisk -filter "DriveType = 3" | ForEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
fuente
Ambos ejemplos no funcionan debido a la sintaxis incorrecta de PowerShell. El siguiente código enumera los tamaños de volumen del host actual (usando PowerShell 5.0):
El siguiente código enumera los tamaños de volumen de los hosts enumerados en server.txt :
Nota al margen
Tenga en cuenta que el marcador de lugar externo
$_
enumera las direcciones del servidor, mientras que el marcador de lugar interno$_
enumera los dispositivos. Ese es un problema frecuente para los novatos de PowerShell. Si desea utilizar la dirección del servidor en el bucle interno, debe asignarla a una nueva variable en el bucle externo.El software del foro utilizado aquí es defectuoso. En las vistas previas de las publicaciones, se muestra
$_
correctamente como un$_
código aunque no se haya escapado. Pero la publicación final elimina el guión bajo, lo que hace que los ejemplos de PowerShell sean incorrectos.fuente
Get-WmiObject win32_logicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB }
pero como soy un novato de PS, no entiendo cuál sería el siguiente paso para automatizar esto (ejemplo, cómo tomaría la salida del primer comando y si el la unidad estaba por debajo de un umbral de espacio, conecte un comando PS para enviar y enviar un correo electrónico. Veo que Boadad puede enviar un correo electrónico desde una publicación anterior,-command &{send-mailmessage ...
pero no estoy seguro de cómo conectar el suyo con una lógica que dicta que el espacio es bajo. Thx.Puede usar este script para enviar un correo electrónico utilizando su servidor de correo electrónico. Simplemente reemplace el nombre del servidor smtp con el de su servidor. Si está en la misma máquina, utilice "localhost" (el servidor smtp debe ser funcional). El script también se encuentra aquí: https://gallery.technet.microsoft.com/scriptcenter/Disk-Space-Report-Reports-98e64d65
Una vez que el script se guarda en la unidad local, se puede ejecutar fácilmente con PowerShell y probarlo. Una vez que el script parece funcionar bien, se puede programar para que se ejecute todos los días o cada hora, según los requisitos, utilizando el programador de tareas de Windows. Este artículo explica cómo ejecutar un script usando el programador de tareas. https://www.metalogix.com/help/Content%20Matrix%20Console/SharePoint%20Edition/002_HowTo/004_SharePointActions/012_SchedulingPowerShell.htm
fuente
He arreglado el guión. Simplemente cree un archivo de texto llamado por ejemplo server.txt e incluya la dirección IP o los nombres de servidor y luego puede ejecutar el siguiente script
Get-Content server.txt | foreach-object {Get-WmiObject -ComputerName 192.168.22.208 win32_logicalDisk -filter "DriveType = 3" | ForEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
Saludos, Luis.
fuente
Get-Content server.txt | foreach-object {Get-WmiObject -ComputerName xx.xx.xx.xx win32_logicalDisk -filter "DriveType = 3" | forEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
fuente