Перечислите все файлы, которые были перемещены в теле письма - Powershell - PullRequest
1 голос
/ 07 января 2020

Попытка выполнить sh следующее:

1) Переместить файлы из нескольких источников в несколько мест назначения. Поэтому я перечислил источники в столбце SOURCE и адресаты в столбце DESTINATION (РАБОТАЕТ)

2) Отправьте электронное письмо со списком файлов, которые были перемещены, и место назначения (Не работает)

Param (
  [string]$SMTPServer = "XXX.XX.xXX",
  [string]$From = "from@email.com",
  [string]$To = "to@email.com",
  [string]$Subject = "New File"
)

Import-Csv -Path "C:\moveallfiles.csv" -ErrorAction Stop | foreach {
if (-not (Test-Path -Path $_.Destination))
{
    # Create directory if needed
    New-Item -ItemType directory -Path $_.Destination -WhatIf
}
# Copy file
 $MoveFileprocess = Move-Item -Path $_.Source -Destination $_.Destination -force -PassThru
}
 $SMTPMessage = @{
    To = $To
    From = $From
    Subject = "$Subject"
    Smtpserver = $SMTPServer
}
$SMTPBody = "`nThe following files have recently been added `n
          $MoveFileprocess   `n"
Send-MailMessage @SMTPMessage -Body $SMTPBody

Сейчас он перечисляет все файлы в одну строку, трудно читаемую. Мне было интересно, есть ли способ отправить тело письма в виде

File 1 moved to Destination 1
File 2 moved to Destination 2

и так далее ...

1 Ответ

1 голос
/ 08 января 2020

Вы были довольно близко. Попробуйте это:

Param (
  [string]$SMTPServer = "XXX.XX.xXX",
  [string]$From = "from@email.com",
  [string]$To = "to@email.com",
  [string]$Subject = "New File"
)
$SMTPBody = "`nThe following files have recently been added `n"
Import-Csv -Path "C:\moveallfiles.csv" -ErrorAction Stop | foreach {
    if (-not (Test-Path -Path $_.Destination)){
        # Create directory if needed
        New-Item -ItemType directory -Path $_.Destination 
    }
    If((Get-Item $_.Source).LastWriteTime -gt (Get-Item $_.Destination).LastWriteTime){
        Move-Item -Path $_.Source -Destination $_.Destination -force
        $SMTPBody += "$($_.Source) moved to $($_.Destination)`n"
    }Else{
        Write-Warning "Skipped overwriting newer $($_.Destination)"
    }
}
$SMTPMessage = @{
    To = $To
    From = $From
    Subject = "$Subject"
    Smtpserver = $SMTPServer
}
Send-MailMessage @SMTPMessage -Body $SMTPBody

Обратите внимание, что Move-Item -PassThru возвращает затронутый объект, а не строку. Я выбрал параметр -WhatIf для команды New-Item, отступ для foreach{} l oop, а также установил отступ и скобки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...