Powershell新手希望创建脚本来触发丢失文件的通知

时间:2016-03-21 13:27:59

标签: powershell

长时间潜伏着第一次海报。我正在寻找(我自己主动)看看是否有一种方法可以检查丢失的文件,我们希望每天收到这些文件,并通过电子邮件通知。

我们的公司拥有我称之为相对复杂的系统基础结构,自从我到达以来,我一直在这里和那里采取一些做法和流程,以便更积极主动地进行监控。

特别是在这种情况下,我们通过FTP从供应商处接收文件,其中概述了我们的销售和其他数据。这些文件经过一些验证,然后将数据导入我们的ERP平台。但是我有兴趣进行检查,在没有收到文件时提出并提醒。

该要求的最后一部分可能会发生变化,我不确定在尝试从预期文件中发出警报时我可以获得具体的信息。

我将通过声明我是这个领域的相对新手来概述这一点,但我的部门中确实没有人更聪明。所以我一直在研究powershell。

到目前为止,我已经创建了以下两位代码,在执行时似乎返回在最后一天内创建/最后写入的文件。这甚至可以通过电子邮件发送此输出。如果预期文件不在列表中,我将能够快速发现。

GET-ChildItem -Path "Path I am checking" | 
Where-Object {$_.LastWritetime -gt (get-Date).AddDays(-1)}

以上内容返回一个.csv文件。我想如果我得到一个返回的文件,那么我知道它已被提供,如果返回为空/零,那么我知道我没有得到一个文件。

我已经使用上面的四个单独检查,检查结构中的其他子文件夹。

概述文件夹结构
    \“App server”\“Region”\“Vendor”

然后有以下子文件夹
    购买
    销售
    招标
    增值税

以上四个文件夹中的每一个都有     传入
    已处理

我正在检查上面列出的四个文件夹中每个文件夹的已处理文件夹。

1 个答案:

答案 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