Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email 如果在PowerShell中检测到字符/字符串,则发送电子邮件_Email_Powershell - Fatal编程技术网

Email 如果在PowerShell中检测到字符/字符串,则发送电子邮件

Email 如果在PowerShell中检测到字符/字符串,则发送电子邮件,email,powershell,Email,Powershell,问题: 我需要一个PowerShell脚本,用于检查文件夹中的每个文件是否有特定字符(#),然后仅在找到该字符时才通过电子邮件发送文件名 我所拥有的:我对循环/测试逻辑仍然是新手,不确定它适合哪里。我当前的脚本成功地检查了坏角色,但不管是否发现了什么,都会发送电子邮件 $scr = dir \\fileshare\businessfolder\filedrop | Select-String '#' $FromAddress = "myself@something.com" $ToAddre

问题: 我需要一个PowerShell脚本,用于检查文件夹中的每个文件是否有特定字符(#),然后仅在找到该字符时才通过电子邮件发送文件名

我所拥有的:我对循环/测试逻辑仍然是新手,不确定它适合哪里。我当前的脚本成功地检查了坏角色,但不管是否发现了什么,都会发送电子邮件

$scr = dir \\fileshare\businessfolder\filedrop | Select-String '#'

$FromAddress = "myself@something.com"

$ToAddress = "myself@something.com"

$MessageSubject = "Bad Character Detected"

$SendingServer = "mail.something.com"

$SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, $MessageSubject,$scr

$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer

$SMTPClient.Send($SMTPMessage)
这将在电子邮件中当前输出:

\fileshare\businessfolder\filedrop\AD060101.107:3:#不适用 \fileshare\businessfolder\filedrop\AD060102.107:3:#不适用 \fileshare\businessfolder\filedrop\AD060101.103:14:#不适用

我正在扫描的文件的格式如下:

AHMMDDNN.LLL

ADMMDDNN.LLL

AH/AD表示它是标题还是细节,MMDD表示月/日,NN表示它是当天生成的第一个文件,第二个生成的文件,等等。LLL是位置号

我真正想要的: 为了更进一步,我想删除错误的文件头和详细信息文件,并通过电子邮件将扩展名发送给业务部门

这一进程将是:

  • 扫描文件夹中所有文件中的“#”
  • 删除ADMMDDNN.LLL和相应的AHMMDDNN.LLL文件。(例如:AD060101.107中有一个“#”,因此删除该文件和AH060101.107文件)
  • 发送一封电子邮件,说明“位置LLL已被删除,请重新创建文件”。(示例:“位置107已删除,请重新创建文件”)

  • 只需迭代cmdlet中的所有匹配项,并使用
    regex
    为(别名
    rm
    )cmdlet创建模式,如
    a[D|H]060101.103

    $filesToDelete = Select-String -Path '\\fileshare\businessfolder\filedrop\*' -Pattern '#'
    
    $filesToDelete | ForEach-Object {
            'location {0} has been deleted, please recreate file' -f ($_.Filename -split '\.')[-1]
             $_.Path -replace '(.*\\A).(.*)', '$1[D|H]$2'  | rm -Force -ea 0
        }
    

    注意:我省略了电子邮件部分,但将消息添加到
    foreach

    $src
    将是一个匹配对象,而不仅仅是一个字符串,因此它将包含您需要的大部分信息。即作为属性的文件路径。你试过自己完成问题的这一部分吗?我在示例中迷失了方向:AD060101.107中有一个“#”。您的意思是在
    AD060101.107
    文件内容中找到的
    #
    字符(数字符号)?是的,对不起,###是107,还是3?谢谢!我使用您提供的工具运行,并在我的测试环境中获得了成功,但是我了解到,我需要在Unix上运行此工具,而且脚本无法工作,它甚至不会抛出错误消息。你有什么想法吗?没有,对不起。您可以检查
    $filesToDelete
    是否为空。