이미 해당 내용에 대해서는 포스팅 하였으나, 추가로 정리하여 다시 기재 합니다.
구동순서는 이렇습니다.
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