2013-05-16 4 views
0

다음과 같은 문제가 발생합니다. 로그 파일이 첨부 된 이메일을 보내는 powershell 스크립트가 있습니다. 유일한 문제는 비어 있지 않은 로그 파일 만 필요하다는 것입니다.Powershell 메일 보내기

If ((Get-content "Log.txt") -gt 0) { 
    $smtp.Send($msg) 
    echo "email sent" 
    } else { 
    echo "File is blank" 
    } 

-gt 0 나를 위해 작동하지 않는 것 같습니다 : 그래서 나는이 스크립트를 사용하는 것을 시도했다. 필자가 뭘 했건 상관없이 powershell은 여전히 ​​빈 로그를 보냅니다. 내가 잘못한 곳을 보여 주시겠습니까? 나뿐만 아니라이 시도 :

If ((Get-Content $file) -eq $Null) { 
    "File is blank" 
    } else { 
    $smtp.Send($msg) 
    echo "email sent" 
    } 

하지만 여전히 작동하지 않습니다.

미리 감사드립니다.

+0

저는 PowerShell에 대해 잘 모릅니다. 기본적으로 Windows를 모두 피합니다. 하지만'Get-content' 대신에 실제 파일 크기를 확인할 수 있다고 가정합니다. 그런 다음 파일 크기를 사용하여 파일을 보낼지 여부를 결정하십시오. – user1596138

+0

안녕하세요 Josiah, 의견 주셔서 감사합니다. 나는 실제 파일 크기로 시도했지만 결과는 같았다. 빈 파일 이름이 전송됩니다. if ((Get-ChildItem "Log.txt") | foreach-process ($ _ 길이/1MB -gt ("0.00"))) { $ smtp.Send ($ msg) \t "다른 \t은} { \t 에코"파일 \t} 것은 내가 그 크기가 0킬로바이트 인 빈 파일을 만들 수 있지만 서버의 로그 파일이 1킬로바이트 경우에도 비어 있다는 것입니다 "비어 있습니다. – user1097593

+0

우선, 저는 여러분이 새로운 사람이라는 것을 알고 있습니다. 여러분의 코드를 역 인용 부호로 묶어서 블록으로 포맷하도록 알려줄 것이라고 생각했습니다. 둘째로 내가 할 것은 파일에 캐릭터를 넣는 것만 큼 파일의 크기가 큰지 확인하는 것입니다. 2KB로 변경되면 아무것도 <= 1KB를 공백으로 간주합니다. – user1596138

답변

1

Get-Content은 파일의 전체 내용을 읽습니다. 그것은 엄청난 자원 낭비입니다.

대신 get-item 또는 get-childitem 인 파일 정보를 파일 시스템에서 가져옵니다.

if ((get-item "log.txt").length -gt 0) { 
    do stuff 
} 

이메일을 보내는 오래된 방법을 사용하는 것 같습니다. PowerShell 2.0 이상에서는 Send-MailMessage을 사용하십시오. 사용하기가 훨씬 쉽습니다. 실제로 하나의 디렉토리에 모든 로그 파일이 있으면이 파일을 두 줄로 증류 할 수 있습니다.

$logs = get-childitem -path PATH_TO_LOGS|where-object{($_.length -gt 0) -and !$_.PSIsContainer}|select-object -expandproperty fullname 
Send-Mailmessage -attachments $logs OTHER_PARAMETERS_HERE 
+0

도움을 주셔서 감사합니다. 나는 Send-Mailmessage와 get-content를 사용하여 파일을 비울 지 여부를 검사하지 않았다. – user1097593

+1

도움이된다면, 답변으로 upvote 및/또는 표시하십시오. – alroc