2014. 12. 2. 11:49

원격서버 디스크 체크후 메일 보내기 까지(2)

이미 해당 내용에 대해서는 포스팅 하였으나, 추가로 정리하여 다시 기재 합니다.


구동순서는 이렇습니다. 

vbs 로 각 서버를 체크 -> 1대의 서버에서 vbs 로 체크한 파일을 복사해옴 -> 복사해온 파일을 1개의 파일로 내용 함축 -> 함축된 파일을 가지고 첨부파일로 메일 발송.


먼저 Powershell 간단한 소스부터.



-------------------------------------------------------------------------------------------------------

remove-item H:\JOB\alldiskuse.txt

Function Get-ALLDiskFreeSpace
{
    copy \\211.1.1.2\h$\job\disk2.txt H:\JOB\disk2.txt
    copy \\211.1.1.3\h$\job\disk.3.txt H:\JOB\disk3.txt

    Get-Content h:\job\disk2.txt
    Get-Content h:\job\disk3.txt     <-- 파일을 읽어와서
}

Set-Alias "alldf" "Get-AllDiskFreeSpace"    <-- alias 를 지정해주고


alldf | Out-File -FilePath H:\JOB\alldiskuse.txt   <-- 지정함 alias 를 파일로 내보내기 합니다.

$SmtpServer = "127.0.0.1"
$From = "admin@duck.pe.kr"   #보내는사람
$To =  "admin@duck.pe.kr,admin2@duck.pe.kr"   #메일 받는사람의 구분은 , 으로 합니다.
$subject = "전체서버 디스크체크"
$filename = "H:\job\alldiskuse.txt"
$Body = Get-Content -Path H:\JOB\All_disk.htm
$smtp = new-object system.net.mail.smtpClient($SmtpServer)
$mail = new-object System.Net.Mail.MailMessage
$att = new-object System.Net.Mail.Attachment($filename)
$mail.From = $From
$mail.To.Add($To)
$mail.Subject = $subject
$mail.Body = "$Body"
$mail.Attachments.Add($att)
$mail.IsBodyHtml = $false
$smtp.Send($mail)


-------------------------------------------------------------------------------------------------------



그럼 위 소스상의 disk2.txt 파일은 무엇이냐면... VBS 파일로 해당 서버의 디스크를 체크한것입니다.


VBS 소스를 보겠습니다.


--------------------------------------------------------------------------------------------------------

mailText2 = "IP : 211.1.1.2"&" / " & now() & vbCrLf

mailText = "이름 " & vbTab & "전체 용량" & vbTab & vbTab & "사용가능용량"& vbTab & vbTab & "사용가능용량%" & vbCrLf

Const HARD_DISK = 3
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "")

For Each objDisk in colDisks

    'wscript.Echo
    mailText = mailText & objDisk.DeviceID & vbTab & FormatNumber(objDisk.Size/2^30,1) & " GByte" & vbTab & vbTab & FormatNumber(objDisk.FreeSpace/2^20,0,vbfalse,vbfalse,vbtrue) & " MByte " & vbTab & vbTab &FormatNumber((objDisk.FreeSpace/objDisk.Size)*100,1) & "%" & vbCrLf
Next



Dim objFSO
Dim objStream

   Set objFSO = createobject("scripting.filesystemobject")
   Set objStream = objFSO.CreateTextFile("H:\Hanbiro_job\disk86.200.txt", True)
   objStream.Writeline mailText2
   objStream.Writeline mailText
--------------------------------------------------------------------------------------------------------




위 소스를 확인할시에는 아래와 같이 나타납니다.


IP : 211.1.1.2 / 2014-12-01 오후 3:00:05

이름     전체 용량        사용가능용량        사용가능용량%
C:    99.9 GByte        49,369 MByte         48.3%
D:    830.0 GByte        759,374 MByte         89.3%
H:    1,863.0 GByte        891,313 MByte         46.7%







** powershell 을 예약된 작업으로 등록할시에는 아래와 같이 실행파일을 powershell 경로와 같이 써주면 됩니다.


C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe H:\job\allserverdiskcheck.ps1