2011-05-11 3 views
2

많은 파일을 반복하여 파일 정보를 콘솔에 기록하는 PowerShell 스크립트가 있습니다. 화면에 출력되는 내용은 이메일을 통해 전송해야하는 것입니다.Powershell 스크립트의 모든 출력을 전자 메일로 보내기

전자 메일 부분은 쉬웠지만 화면으로 전송되는 내용을 캡처하여 본문으로 보내는 방법을 알 수 없습니다. 다음은 관련 코드입니다. 첫 번째 반복 만 $ emailbody 변수에 저장됩니다.

EDITED 예 :

$backupLocations = #List of paths# 

$emailBody="" 
$currentFile = "nothing" 
foreach ($loc in $backupLocations) { 
    $files = get-childitem "$loc\\*" -recurse -include *.bak  
    foreach ($file in $files) { 
     if (test-path $file) { 
      $prop = Get-ItemProperty -Path "$file" 
      Write-Output $prop | tee-Object -variable $currentFile 
      $emailBody += $currentFile 
     } 
    }  
} 

# Code to send $emailBody in an email. That is working fine.# 

은 내가 화면에 표시되는 것은 이와 같은 파일 정보의 가치 페이지입니다 :

틀림
Directory: \\directory\directory\directory\myfolder 

Mode    LastWriteTime  Length Name                               
----    -------------  ------ ----                               
-a---   5/10/2011 10:00 PM 1986048 file.bak 

나는 RTFM하지 않은 기본적를 통해 내 방식대로 해킹 이 시점에서 Powershell, 그래서 제발 대답이 분명한 경우 용서해주십시오.

+0

몇 가지 기본적인 질문 : 그 기능은 무엇입니까? 또는 스크립트의 일부분일까요? 'if ($ file)'로 무엇을 검사하고 있습니까? –

+0

@empo, 감사합니다. 나머지 코드를 추가했습니다. 나는 $ file이 존재하는지 테스트하고 있었으며'test-path' 커맨드 렛을 사용하면 더 잘 수행됩니다. –

+0

@Ken Pespisa : 괜찮습니까? 아니면 여전히 곤란한가요? –

답변

3

당신은 이런 식으로 뭔가를하려고하면 안

$emailBody="" 
foreach ($file in $files) { 
    if ($file) { 
     $prop = Get-ItemProperty -Path "$file" 
     Write-Output $prop | tee-Object -Variable currentFile 
     $emailBody += $currentFile 
    }   
} 

당신이 생각하고있는 일을 더 나은 방법이 있습니다. 그래서 $ 파일이 무엇인지에 대한 세부 사항을 제공 할 수 있고 콘솔에 출력하고 싶은지 여부를 결정할 수 있다면 더 나은 스크립트를 볼 수 있습니다. 당신의 갱신 후

:

겠습니까 당신을 위해 일하기 싫어하는 일 :

$files = gci "$loc\\*" -recurse -include *.bak 
Write-Host $files 
$emailBody = $files | ft 

나는 아무것도 필요 생각하지 않습니다! test-path처럼 - 왜? 당신은 물론 GC를하고 있습니다!

+0

그게'$ emailBody'를 덮어 쓴 문제를 해결합니까? 그러나 각 파일에 대한'write-output'은별로 좋지 않습니다. 각 파일의 헤더를 출력합니다. 맞습니까? –

+0

예, 저는 지금 당장 제안했습니다. $ 파일이 무엇인지에 따라 그는 아마도 그 파일을 파이프해야합니다. 또는'gci '또는 무엇인가를 직접 사용하십시오. – manojlds

+0

@manojlds, 나는 당신의 코드를 시도했지만 Tee-Object 커맨드 릿이 "널 변수이기 때문에 변수 '변수'에 인수를 바인딩 할 수 없기 때문에 $ currentFile에 값을 넣어야했습니다." 변수를 "nothing"이라는 단어와 같게 설정하고 스크립트가 실행되었습니다. 그러나 전자 메일 보고서에 "아무것도 없음"이라는 단어가 100 번 이상 반복되어 나타났습니다. 즉, 각 파일에 대해 한 번만 나타납니다. –

1

각 반복 $emailBody을 덮어 씁니다. 또한, 생각하는 각 파일에 대해 속성의 머리글이 인쇄됩니다. 나는 시도 할 것이다 :

 
$props = @() 
$files | % { 
    $prop = Get-ItemProperty -Path "$file" 
    $props += $prop 
} 
$emailbody = $props | format-table -auto 
관련 문제