Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.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
Arrays Powershell检查文件夹并发送电子邮件_Arrays_Powershell_Email_Get Childitem - Fatal编程技术网

Arrays Powershell检查文件夹并发送电子邮件

Arrays Powershell检查文件夹并发送电子邮件,arrays,powershell,email,get-childitem,Arrays,Powershell,Email,Get Childitem,我有一个程序,检查两个路径的文件,如果有任何文件,它会为每个人发送一封邮件。 他们现在需要检查四条路径,多人需要一封邮件作为路径。 e、 g 路径1-邮件发送到x、y和z 路径2-向a和b发送邮件 路径3-向x和a发送邮件 路径4-发送至s、r和w的邮件 我如何使它变得简单和最有效 $folders = @() $folders += "\\server\files\Info\test" $folders += "\\server\files\Info\test

我有一个程序,检查两个路径的文件,如果有任何文件,它会为每个人发送一封邮件。 他们现在需要检查四条路径,多人需要一封邮件作为路径。 e、 g

  • 路径1-邮件发送到x、y和z
  • 路径2-向a和b发送邮件
  • 路径3-向x和a发送邮件
  • 路径4-发送至s、r和w的邮件
我如何使它变得简单和最有效

$folders = @()
$folders += "\\server\files\Info\test"
$folders += "\\server\files\Info\test2"

$receiver = @()
$receiver += "person1@test.com"
$receiver += "person2@test.com"

$i = 0

$folders | ForEach-Object { 
  $checkforfiles = $_ 
  $directoryInfo = Get-ChildItem $checkforfiles | Measure-Object
  $directoryInfo.count #Returns the count of all of the objects in the directory

  $Numberone = $directoryInfo.Count

  if ($directoryInfo.count -ge 1){
    send-mailmessage -subject "Subject" -Body "There are $checkforfiles files " -from foldercheck@test.com  -to $receiver[$i] `
    -smtpserver  smtp.ser.com

    $i = $i+1
  }
  else{
    write-host "nothing to process"
  }     
}

您可以简单地扩展文件夹数组来测试并使用开关来确定哪些用户应该收到电子邮件

另外,我建议在带有大量参数的cmdlet上使用,以使代码更清晰

# an array of folder paths to test
$folders = "\\server\files\Info\test", "\\server\files\Info\test2", "\\server\files\Info\test3", "\\server\files\Info\test4"

for ($i = 0; $i -lt $folders.Count; $i++) {
    # get the file (and folder) count inside
    $count = @(Get-ChildItem -Path $folders[$i]).Count
    if ($count -gt 0) {
        # determine who to email
        $to = switch ($i) {
            0 { 'personX@test.com', 'personY@test.com', 'personZ@test.com' ; break }
            1 { 'personA@test.com', 'personB@test.com' ; break }
            2 { 'personX@test.com', 'personA@test.com' ; break }
            3 { 'personS@test.com', 'personR@test.com', 'personW@test.com' }
        }
        # set up a hashtable with parameters for splattting to Send-MailMessage
        $mailParams = @{
            To         = $to
            From       = 'foldercheck@test.com'
            Subject    = "Subject"
            Body       = "There are $count files in folder '$($folders[$i])'"
            SmtpServer = 'smtp.ser.com'
            # add more parameters here if needed
        }
        # send the email
        Send-MailMessage @mailParams
    }
    else {
        Write-Host "Empty folder '$folders[$i]'; Nothing to process"
    }
}

您好,首先感谢您的帮助,它的大部分工作都非常完美,并大大改进了我的代码,我以前从未使用过switch。有一个问题,用户即使只在一条路径中收到的邮件看起来是这样的:文件夹“\\server\files\Info\test\\server\files\Info\test2[1]”中有1个文件,即使他只在一条路径中,他仍然会收到这两条路径。@Nainad编辑了正文。非常感谢,现在一切都很好:)