Отправьте по электронной почте весь вывод из скрипта Powershell - PullRequest
2 голосов
/ 11 мая 2011

У меня есть скрипт 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 ]

3 голосов
/ 12 мая 2011

Если вы не пытаетесь что-то вроде этого:

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

Хотя есть лучшие способы сделать то, что вы делаете.Поэтому, если вы можете сообщить подробности о том, что такое $ files и действительно ли вы хотите выводить на консоль, и т. Д., Мы можем взглянуть на лучший сценарий.

После обновления:

Не подойдет ли вам что-то подобное ниже:

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

Не думаю, что нужно что-то еще!Как test-path - почему?вы делаете gci, конечно, он существует!

1 голос
/ 12 мая 2011

Каждая итерация вашего $emailBody перезаписывается.Кроме того, заголовок ваших свойств будет напечатан для каждого файла, я думаю.Я бы попробовал:

$props = @()
$files | %  {
    $prop = Get-ItemProperty -Path "$file"
    $props += $prop
}
$emailbody = $props | format-table -auto
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...