【问题标题】:Powershell EMail: Script for sending eMails not working on my windowsPowershell 电子邮件:用于发送电子邮件的脚本在我的 Windows 上不起作用
【发布时间】:2015-11-16 10:51:45
【问题描述】:

我不是 Powershell 背景。

我即将安排需要发送邮件的任务;如果磁盘大小小于预期限制。

以下是我正在使用的脚本:

$servers = Get-Content "C:\serverlist.txt";

foreach($server in $servers)
{
 # Get fixed drive info
  $disks = Get-WmiObject -ComputerName $server -Class Win32_LogicalDisk -Filter "DriveType = 3";
  foreach($disk in $disks)
  {
      $deviceID = $disk.DeviceID;
      [float]$size = $disk.Size;
      [float]$freespace = $disk.FreeSpace;

     #Here you have to mention the drive id for example i mentioned 'C' drive below
     if($deviceID -eq "C:")
     {
       $percentFree = [Math]::Round(($freespace / $size) * 100, 2);
       $sizeGB = [Math]::Round($size / 1073741824, 2);
       $freeSpaceGB = [Math]::Round($freespace / 1073741824, 2);

       if($freeSpaceGB -lt 100)
       {
          $EmailFrom = "monitoring@mydomainname.no"
          $EmailTo = "fatherazrael@evry.com"
          $Subject = "Disk Space"
          $Body = "$disk drive space is less free space in $server server: $freeSpaceGB"
          $SMTPServer = "scan.opinkerfi.is"
          $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25)
          #$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("<From mail ID>", "Password"); //Not Required
          $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)   
       }
    }
 }
}

我不知道如何应用日志记录。有人能弄清楚问题出在哪里吗?事件查看器或任何地方都没有日志。

我可以使用事件查看器、任务计划程序和性能工具来配置所有这些,但我被告知要使用 Powershell。

【问题讨论】:

  • 如果您直接从 powershell 运行脚本,您应该会收到错误消息(如果存在)
  • 这里回答了如何将错误输出到日志文件中:stackoverflow.com/questions/3008545/…
  • 如果您希望 PowerShell 脚本将某些内容记录到事件日志中,您需要 instruct it to actually do that
  • 注意:您的脚本非常适合我。
  • 我在任务计划程序中使用它。我的磁盘是 227 GB C: 驱动器和 227 GB D 驱动器。我在服务器列表中使用计算机名称 something.domainname.com。我在任务调度程序中配置它,在操作启动程序并给出 .ps1 文件的路径下。

标签: powershell scheduled-tasks


【解决方案1】:

您的脚本对我有用。会不会是你的磁盘空间在 100GB 以上?

if($freeSpaceGB -lt 100)

您可以使用一些错误处理。尝试将电子邮件发送部分更改为:

if($freeSpaceGB -lt 1000)
       {
        try {
              $EmailFrom = "monitoring@mydomainname.no"
              $EmailTo = "fatherazrael@evry.com"
              $Subject = "Disk Space"
              $Body = "$disk drive space is less free space in $server server: $freeSpaceGB"
              $SMTPServer = "scan.opinkerfi.is"
              $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25)
              #$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("<From mail ID>", "Password"); //Not Required
              $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
            }
        catch
            {
                $Error[0].Exception.Message | Out-File ($server + '_error.txt')
            } 

在使用 txt 文件将部分电子邮件发送到当前目录时,您将收到相关错误。

【讨论】:

  • 我在任务计划程序中使用它。我的磁盘是 227 GB C: 驱动器和 227 GB D 驱动器
  • 我在服务器列表中使用计算机名 something.domainname.com
  • 您有多少可用空间?因为您的脚本当前仅在剩余空间不足 100GB 时才有效。如果超过 100GB,它将不会发送任何电子邮件。您可以尝试更改为 if($freeSpaceGB -lt 1000)。
猜你喜欢
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 2022-10-08
  • 2020-11-03
相关资源
最近更新 更多