Saya bertanya-tanya apakah ada cara mudah untuk memicu peringatan e-mail pada Windows Server 2008 ketika setiap partisi disk logis menjadi kekurangan ruang. Saya memiliki 2 server SQL yang hampir kehabisan ruang disk karena file log DB.
Terima kasih, Ryan
Jawaban:
Salah satu cara sederhana untuk mendapatkan Windows Server 2008 untuk mengirim peringatan e-mail ruang disk rendah adalah dengan menggunakan Penjadwal Tugas dan Log Sistem. Jika ruang kosong turun di bawah persentase yang ditentukan dalam HKLM \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters \ DiskSpaceThreshold , suatu peristiwa dicatat dalam Log Sistem yang dapat memicu tugas untuk mengirim pesan email.
sumber
powershell
untuk program dan yang berikut untuk argumen:-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}
Saya menambahkan pemantauan ruang disk melalui snmp ke instance nagios (terpisah) saya.
sumber
Mengapa Anda tidak menjalankan skrip PowerShell sebagai tugas jadwal setiap hari? Jika skrip menemukan ruang kosong disk lebih rendah dari 10%, ia akan mengirimi Anda email atau pemberitahuan.
berikut adalah contoh kode untuk memeriksa ruang kosong disk:
Get-Content ForEach-Object {$ ; Get-WMIObject –computername $ Win32_LogicalDisk -filter "DriveType = 3" | ForEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
sumber
Kedua contoh tidak berfungsi karena sintaks PowerShell yang salah. Kode berikut mencantumkan ukuran volume host saat ini (menggunakan PowerShell 5.0):
Kode berikut mencantumkan ukuran volume host yang terdaftar di server.txt :
Sidenote
Perhatikan bahwa tempat dudukan luar
$_
menyebutkan alamat server sedangkan tempat dudukan bagian dalam$_
menyebutkan perangkat. Itu sering didapat untuk pemula PowerShell. Jika Anda ingin menggunakan alamat server di loop dalam, Anda harus menetapkannya ke variabel baru di loop luar.Perangkat lunak forum yang digunakan di sini cacat. Dalam pratinjau pos, ini ditampilkan
$_
dengan benar sebagai$_
bahkan jika tidak lolos sebagai kode. Tetapi posting terakhir menghapus garis bawah, sehingga membuat contoh PowerShell salah.sumber
Get-WmiObject win32_logicalDisk -filter "DriveType=3" | %{ $_.DeviceID; $_.FreeSpace/1GB }
tetapi sebagai pemula PS, saya tidak begitu mengerti apa langkah selanjutnya untuk mengotomatisasi ini (contoh, bagaimana seseorang akan mengambil output dari perintah pertama dan jika drive berada di bawah ambang batas ruang, memasang perintah PS untuk mengirim dan mengirim email. Saya melihat bahwa email dapat dikirim dari pos dengan menggunakan boadad di atas menggunakan-command &{send-mailmessage ...
tetapi tidak yakin bagaimana cara menghubungkan Anda dengan logika yang menentukan bahwa ruang surat rendah harus dikirim Thx.Anda dapat menggunakan skrip ini untuk mengirim email menggunakan server email Anda. Ganti saja nama server smtp dengan nama server Anda. Jika pada mesin yang sama maka gunakan "localhost" (server smtp harus fungsional). Skrip juga ditemukan di sini: https://gallery.technet.microsoft.com/scriptcenter/Disk-Space-Report-Reports-98e64d65
Setelah skrip disimpan di drive lokal, skrip dapat dengan mudah dijalankan menggunakan PowerShell dan diuji. Setelah skrip tampak berfungsi dengan baik, maka skedul dapat dijadwalkan untuk berjalan setiap hari atau setiap jam berdasarkan kebutuhan menggunakan penjadwal tugas windows. Artikel ini menjelaskan cara menjalankan skrip menggunakan penjadwal tugas. https://www.metalogix.com/help/Content%20Matrix%20Console/SharePoint%20Edition/002_HowTo/004_SharePointActions/012_SchedulingPowerShell.htm
sumber
Saya telah memperbaiki skrip. Cukup buat file teks bernama misalnya server.txt dan sertakan alamat ip atau nama server dan kemudian Anda dapat menjalankan skrip berikut
Get-Content server.txt | foreach-object {Get-WmiObject -ComputerName 192.168.22.208 win32_logicalDisk -filter "DriveType = 3" | ForEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
Salam, Luis.
sumber
Get-Content server.txt | foreach-object {Get-WmiObject -ComputerName xx.xx.xx.xx win32_logicalDisk -filter "DriveType = 3" | forEach-Object {$ .DeviceID; $ .FreeSpace / 1GB}}
sumber