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