2011-05-11 106 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)'檢查什麼? – 2011-05-11 19:58:16

+0

@empo,謝謝,我已經添加了其餘的代碼。我只是在測試$文件是否存在,我發現最好使用'test-path'命令執行 – 2011-05-11 20:48:15

+0

@Ken Pespisa:你還好嗎還是仍然有麻煩? – 2011-05-11 20:57:09

回答

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 - 爲什麼?你正在做一個gci,當然它存在!

+0

這解決了覆蓋'$ emailBody'的問題是不是?但是每個文件的'write-output'都不是很好,它會爲每個文件打印頭文件,對嗎? – 2011-05-11 20:16:56

+0

是的,我只是在暗示。基於什麼是$文件,他應該可以通過這種方式進行管理或者直接使用'gci'什麼的。 – manojlds 2011-05-11 20:18:50

+0

@manojlds,我試過你的代碼,但需要把一個值放到$ currentFile中,因爲Tee-Object命令行開關報告「無法將參數綁定參數'變量',因爲它是空的。」我設置變量等於單詞「nothing」,腳本運行。但電子郵件報告顯示單詞「無」重複100次以上(即每發現一個文件一次) – 2011-05-11 20:50:31

1

每次迭代您的$emailBody被覆蓋。此外,您的屬性的標題將打印爲我認爲的每個文件。我會嘗試:

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