Tìm kiếm trang web

PowerShell: Thông báo cho tôi khi Dung lượng ổ đĩa sắp hết trên Máy chủ Windows của tôi (Thông báo qua email)


Không còn nghi ngờ gì nữa, bạn nên để mắt đến dung lượng ổ đĩa trên máy chủ của mình. Tôi đã thấy rất nhiều máy chủ gặp sự cố do giảm dung lượng ổ đĩa theo thời gian, do lưu ngày càng nhiều tệp và dữ liệu hoặc do Cập nhật Windows. Họ đang chạy Exchange, SQL, AD và tất cả đều là những máy chủ quan trọng có phần mềm quan trọng trên đó. Nếu bạn hiện không theo dõi dung lượng trống của ổ đĩa và nếu bạn không có sẵn công cụ doanh nghiệp như SCCM thì bài viết này là dành cho bạn. Chúng tôi làm tất cả với PowerShell, còn gì nữa không? Hãy nhảy vào.

Như đã đề cập, mục tiêu là triển khai giải pháp giám sát để giám sát tất cả các Máy chủ Windows. Để đạt được điều này, chúng ta cần một vài điều:

  • Tất cả Windows Server theo Tên (tốt nhất với môi trường Active Directory đã được dọn dẹp, không có tài khoản máy tính mồ côi)
  • Vòng lặp foreach với Get-WmiObject win32_logicdisk để lấy dung lượng ổ đĩa trống từ tất cả các máy chủ
  • Một câu lệnh if trong vòng lặp để chỉ nhận thông báo về các máy chủ có dung lượng ổ đĩa thấp
  • Cấu hình E-Mail (có thể có mật khẩu trong đó, hãy chắc chắn, tôi sẽ giải quyết vấn đề này và cung cấp cho bạn giải pháp)

Mục đích

Xác định mục tiêu thật dễ dàng. Chúng tôi muốn nhận được E-Mail khi một trong các máy chủ đang chạy trên dung lượng ổ đĩa thấp. E-mail sẽ trông như thế này:

Kịch bản

Tập lệnh sau sẽ cảnh báo bạn nếu một trong các máy chủ của bạn có ít hơn 10% dung lượng ổ đĩa.


### Getting all domain-joined Server by Names

$servers=(Get-ADComputer -Filter 'operatingsystem -like "*server*"').Name

### Get only DriveType 3 (Local Disks) foreach Server

ForEach ($s in $servers)

{$Report=Get-WmiObject win32_logicaldisk -ComputerName $s -Filter "Drivetype=3" -ErrorAction SilentlyContinue | Where-Object {($_.freespace/$_.size) -le '0.1'}
$View=($Report.DeviceID -join ",").Replace(":","")
### Send Mail if $Report (<=10%) is true

If ($Report)

{

$EmailTo = "p.gruenauer@domain.xy"
$EmailFrom = "alert@domain.xy"
$user = 'p.gruenauer@domain.xy'
$password = Unprotect-CmsMessage -Path C:\Temp\pw.txt
$Subject = "Alert: PowerShell Storage Report of $s"
$Body = "Server $s storage space has dropped to less than 10 % on $View"
$SMTPServer = "smtp.domain.xy"
$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($user, $password)
$SMTPClient.Send($SMTPMessage)

}

}

Bạn phải chỉnh sửa dòng 17,18,19,20 và 23 cho phù hợp.

Dòng 20 rất thú vị. Để gửi E-Mail, bạn thường phải xác thực tài khoản của mình với máy chủ E-Mail. Điều này cũng có nghĩa là mật khẩu phải được lưu trong tập lệnh của bạn. Để tránh điều này, hãy mã hóa tệp mật khẩu như được mô tả tại đây PowerShell: Mã hóa và giải mã dữ liệu bằng cách sử dụng Chứng chỉ (Khóa công khai/Khóa riêng tư)

Unprotect-CmsMessage giải mã nội dung của tập tin. Hãy nhớ rằng bạn hy vọng là người duy nhất có khóa riêng và do đó bạn là người duy nhất trên hành tinh này có thể giải mã được tệp mật khẩu.

Nếu bạn thích, hãy sao chép nó vào phiên PowerShell ISE của bạn và lưu nó dưới dạng C:\PowerShell\alert_diskspace.ps1.

Tạo một tác vụ theo lịch trình

Cuối cùng, chúng ta sẽ gói tập lệnh của mình thành một Tác vụ theo lịch trình chạy hàng ngày.

Các dòng bên dưới tạo một tác vụ theo lịch trình chạy C:\PowerShell\alert_diskspace.ps1 mỗi ngày một lần (08:00 sáng).

Bạn có thể muốn chỉnh sửa đường dẫn tệp ở dòng 1 và bạn phải sửa đổi UserId ở dòng 4.


$Action=New-ScheduledTaskAction -Execute "powershell" -Argument "C:\PowerShell\alert_diskspace.ps1"
$Trigger=New-ScheduledTaskTrigger -Daily -At 08am
$Set=New-ScheduledTaskSettingsSet
$Principal=New-ScheduledTaskPrincipal -UserId "sid-500\patrick" -LogonType S4U
$Task=New-ScheduledTask -Action $Action -Trigger $Trigger -Settings $Set -Principal $Principal -Description "Checks free disk space on all Servers. Sends an E-Mail notification if storage drops below 10%"
Register-ScheduledTask -TaskName "Free Disk Space Check" -InputObject $Task -User "sid-500\patrick" -Password (Read-Host 'Enter Password') -Force

Đó là nó. Máy chủ của bạn được theo dõi.

Hẹn gặp lại bạn lần sau với PowerShell!

Bài viết liên quan