Сценарий Powershell проверяет дату изменения файлов и отправляет электронную почту, если она изменена - PullRequest
0 голосов
/ 23 апреля 2020

Мне нужно запустить запланированное задание, которое будет запускаться ежедневно в 7 часов утра, и искать в папке любые файлы с измененной датой, которая изменилась за последний день или 24 часа. Я застрял в том, что то, что я сделал до сих пор, является лучшим способом сделать эту проверку, а также я не уверен, как заставить это отправить по электронной почте файл со списком файлов или файлов, которые изменились в последнем 24 часа. Я не думаю, что FileSystemChecker стоит того времени, которое он запускает, поскольку я прочитал, что это может быть хлопотно. Я пытаюсь сделать что-то, что просто ищет файлы с измененной датой, которая изменилась. Мне не нужно искать удаленные файлы или добавленные файлы по электронной почте в папку. Если ничего не изменилось, мне нужно отправить электронное письмо другой группе людей, чем я, если есть файлы, которые изменились. Я застрял на том, как сделать часть электронной почты. Другая часть, на которой я застрял, заключается в том, чтобы заставить ее принять путь c, чтобы я мог запустить задачу с другого сервера.

Get-Item C:\folder1\folder2\*.* | Foreach { $LastUpdateTime=$_.LastWriteTime $TimeNow=get-date if (($TimeNow - $LastUpdateTime).totalhours -le 24) { Write-Host "These files were modified in the last 24 hours "$_.Name } else { Write-Host "There were no files modified in the last 24 hours" } }

1 Ответ

0 голосов
/ 24 апреля 2020

Прежде всего, не пытайтесь втиснуть весь код в одну строку. Если вы это сделаете, код станет нечитаемым, а ошибки легко будут сделаны, но их будет трудно обнаружить.

Я бы сделал что-то вроде этого:

$uncPath   = '\\Server1\SharedFolder\RestOfPath'  # enter the UNC path here
$yesterday = (Get-Date).AddDays(-1).Date          # set at midnight for yesterday

# get an array of full filenames for any file that was last updates in the last 24 hours
$files = (Get-ChildItem -Path $uncPath -Filter '*.*' -File | 
          Where-Object { $_.LastWriteTime -ge $yesterday }).FullName

if ($files) {
    $message = 'These files were modified in the last 24 hours:{0}{1}' -f [Environment]::NewLine, ($files -join [Environment]::NewLine)
    $emailTo = 'folskthatwanttoknowaboutmodifications@yourcompany.com'
}
else {
    $message = 'There were no files modified in the last 24 hours'
    $emailTo = 'folskthatwanttoknowifnothingismodified@yourcompany.com'
}

# output on screen
Write-Host $message

# create a hashtable with parameters for Send-MailMessage
$mailParams = @{
    From       = 'you@yourcompany.com'
    To         = $emailTo
    Subject    = 'Something Wrong'
    Body       = $message
    SmtpServer = 'smtp.yourcompany.com'
    # any other parameters you might want to use
}
# send the email
Send-MailMessage @mailParams

Надеюсь, что поможет

...