电子邮件Powershell脚本的所有输出

时间:2011-05-11 19:36:31

标签: powershell

我有一个Powershell脚本,它循环遍历许多文件并将文件信息写入控制台。输出到屏幕的内容正是我需要通过电子邮件发送的内容。

电子邮件部分很简单,但我无法弄清楚如何捕获发送到屏幕的内容并将其发送到正文中。这是相关的代码。只有第一次迭代存储在$ emailbody变量中。

编辑示例:

$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攻击了我的方式,所以如果答案是明显的,请原谅我。

2 个答案:

答案 0 :(得分: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,当然它存在!

答案 1 :(得分:1)

每次迭代都会覆盖$emailBody。此外,我会为每个文件打印属性的标题。我会尝试:

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