长时间潜伏着第一次海报。我正在寻找(我自己主动)看看是否有一种方法可以检查丢失的文件,我们希望每天收到这些文件,并通过电子邮件通知。
我们的公司拥有我称之为相对复杂的系统基础结构,自从我到达以来,我一直在这里和那里采取一些做法和流程,以便更积极主动地进行监控。
特别是在这种情况下,我们通过FTP从供应商处接收文件,其中概述了我们的销售和其他数据。这些文件经过一些验证,然后将数据导入我们的ERP平台。但是我有兴趣进行检查,在没有收到文件时提出并提醒。
该要求的最后一部分可能会发生变化,我不确定在尝试从预期文件中发出警报时我可以获得具体的信息。
我将通过声明我是这个领域的相对新手来概述这一点,但我的部门中确实没有人更聪明。所以我一直在研究powershell。
到目前为止,我已经创建了以下两位代码,在执行时似乎返回在最后一天内创建/最后写入的文件。这甚至可以通过电子邮件发送此输出。如果预期文件不在列表中,我将能够快速发现。
GET-ChildItem -Path "Path I am checking" |
Where-Object {$_.LastWritetime -gt (get-Date).AddDays(-1)}
以上内容返回一个.csv文件。我想如果我得到一个返回的文件,那么我知道它已被提供,如果返回为空/零,那么我知道我没有得到一个文件。
我已经使用上面的四个单独检查,检查结构中的其他子文件夹。
概述文件夹结构
\“App server”\“Region”\“Vendor”
然后有以下子文件夹
购买
销售
招标
增值税
以上四个文件夹中的每一个都有
传入
已处理
我正在检查上面列出的四个文件夹中每个文件夹的已处理文件夹。
答案 0 :(得分:0)
也许这样的事情会帮助你:
Function Test-NewerFiles {
# We use parameters as it makes things easy when we need to change things
# CmdLetBinding makes sure that we can see our 'Write-Verbose' messages if we want to
[CmdLetBinding()]
Param (
[String]$Path = 'C:\Users\me\Downloads\Input_Test',
[String]$ExportFile = 'C:\Users\me\Downloads\Log_Test\Attachment.txt'
)
# We first save the date, then we don't need to do this every time again
$CompareDate = (Get-Date).AddDays(-1)
# Then we collect only the folders and check each folder for files and count them
Get-ChildItem -Path $Path -Directory -Recurse | ForEach-Object {
$Files = (Get-ChildItem -Path $_.FullName -File | Where-Object {$_.LastWritetime -gt $CompareDate} | Measure-Object).Count
# If we didn't find files the count is 0 and we report this
if ($Files -eq 0) {
Write-Verbose "No files found in folder $($_.FullName)"
Write-Output $_.FullName
}
# If we found files it's ok and we don't report it
else {
Write-Verbose "Files found in folder $($_.FullName)"
}
}
}
# If you don't want to see output you can remove the '-Verbose' switch
Test-NewerFiles -Verbose
$MyNewFiles = Test-NewerFiles
$MyNewFiles | Out-File -FilePath $ExportFile -Encoding utf8
if ($MyNewFiles) {
$MailParams = @{
To = 'Chuck.Norris@world.com'
From = 'MyScriptServer@world.com'
SmtpServer = 'SMTPServer'
}
Send-MailMessage @MailParams -Priority High -Attachments $ExportFile -Body 'We found problems: check attachment for details'
}
else {
Send-MailMessage @MailParams -Priority Low -Body 'All is ok'
}
Verbose
开关仅用于报告进度。所以我们可以看到它在运行时的作用。但是,当我们在生产中使用此代码时,我们不需要这些消息,只需使用Test-NewerFiles
代替Test-NewerFiles -Verbose
。