none
Отправка на почту о свободном месте на диске RRS feed

  • Вопрос

  • Нашел в интернете скрипт, который отправляет на почту письмо когда мало места на жестком диске.
    Скрипт работает с ошибкой. Как ее исправить?
    PowerShellВыделить код
    1
    2
    3
    4
    5
    6
    
    Исключение при вызове "Send" с "1" аргументами: "Сбой при отправке сообщения электронной почты."
    C:\Users\a.belov\Desktop\PowerShell\недостаточно места на жестком диске и отправляет на почту.ps1:22 знак:3
    +   $smtp.Send($mail)
    +   ~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : SmtpException
    PowerShellВыделить код
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    $MinimumSize = 840GB
    $InfoArr = Get-WMIObject Win32_LogicalDisk -filter "DriveType=3" | Where { $_.FreeSpace -lt $MinimumSize }
    ForEach ($Info in $InfoArr)
    {
      Write-Host "sending mail"
      $mail = New-Object System.Net.Mail.MailMessage
      $mail.From = New-Object System.Net.Mail.MailAddress("mail")
      $mail.To.Add("mail")
     
      $mail.Subject = "Недостаточно свободного места.";
      $mail.Body = "На сервере server.net на диске " + $Info.DeviceID + " недостаточно свободного места. Осталось: " + "{0:N0}" -f ($Info.FreeSpace) + "Гб"
     
      $smtp = New-Object System.Net.Mail.SmtpClient
      $smtp.host = "почтовый сервер через который идёт отправка письма"
     
      $Credentials = new-object System.Net.networkCredential
      $Credentials.domain = "server"
      $Credentials.UserName = "nameserver"
      $Credentials.Password = "pass"
      $smtp.Credentials = $Credentials
     
      $smtp.Send($mail)
    }
    15 ноября 2018 г. 9:26

Ответы

Все ответы

  • 1. Как минимум переименуйте название скрипта в нормальное и желательно латиницей.

    2. Открываете ISE, включаете debug и смотрите на каком моменте возникает ошибка.

    15 ноября 2018 г. 9:47
  • 1. Как минимум переименуйте название скрипта в нормальное и желательно латиницей.

    2. Открываете ISE, включаете debug и смотрите на каком моменте возникает ошибка.

    Зойчем исе? и вообще забудьте про него.

    как минимум топик стартер не указал кучу нужных переменных, некоторые из них русскими буквами написаны в теле скрипта. нет указания порта(но по дефолту там вроде 25 само берет), у почтовиков бывает еще и ссл и прочее.. мб он все еще верит в магию, хз.

    Настройка маппинга USERNAME, обратитесь к сисадмину чтоли, или хотя бы к человеку который слышал про повершелл.

    >>C:\Users\a.belov\Desktop\PowerShell\недостаточно места на жестком диске и отправляет на почту.ps1

    фейспалм.жпг

    >> ForEach ($Info in $InfoArr)

    ржу сижу уже. отдельное письмо по каждому из дисков...

    • Изменено Svolotch 15 ноября 2018 г. 20:09
    15 ноября 2018 г. 18:17
  • Так товарищ хотя бы узнает про это приложение и начнёт разбираться что да как, очень надеюсь на это во всяком случае.

    P.S. Ещё это улыбнуло:

    $smtp.host = "почтовый сервер через который идёт отправка письма"

    16 ноября 2018 г. 6:07
  • На этом форуме сидят такие умные, ржут, смеются. Лучше бы предложили свой вариант или исправили/добавили бы скрипт. Лучше чем флудить.
    16 ноября 2018 г. 6:24
  • На этом форуме сидят такие умные, ржут, смеются. Лучше бы предложили свой вариант или исправили/добавили бы скрипт. Лучше чем флудить.

    а что тут исправлять? это у ВАС в скрипте не указыва ВАШИ почтовые сервера, ВАШИ адреса кому и куда, не указаны подробности подключения к ВАШЕМУ почтовому серверу. Вы серьезно предполагаете что мы погадаем на кофейной гуще и заполним данные в скрипте которые должны быть известны только вам? ну а так условно скрипт вроде верный, чо.

    ну  если вам это поможет вот мой пример с расшифровками:

    #Адрес почты кому
    $emailto="totest@mailserver.ru"
    #Адрес почты от кого и этот адрес используется для аутентификации на почтовом сервере
    $emailfrom="fromtest@mailserver.ru"
    #Пароль от почты
    $pass="1234567"
    
            #создаем обьект письма
    	$msg = new-object Net.Mail.MailMessage
    	#указывам поле от кого
    	$msg.From = "$emailfrom" 
    	#указывам поле кому
    	$msg.To.Add("$emailto")
    	#кодировка тела
    	$msg.BodyEncoding = [system.Text.Encoding]::Unicode
    	#кодировка заголовка
    	$msg.SubjectEncoding = [system.Text.Encoding]::Unicode
    	#указываем что письмо в хтмл
    	$msg.IsBodyHTML = $true 
    	#адрес почтового сервера
    	$smtpServer = "192.168.123.123"
    	#порт почтового сервера
    	$SmtpServerPort = "25"
    	#создаем обьект транспорта письма
    	$smtp = new-object Net.Mail.SmtpClient($smtpServer,$SmtpServerPort)
    	#указываем что транспорт шифрованный SSL
    #	$smtp.EnableSsl = $true
    	$smtp.EnableSsl = $false
    #	Вложения
    	$attachment = "C:\test.txt"
    	$msg.Attachments.Add($attachment)
    
    
    	#указываем в транспорте логин и пароль от почты
    	$SMTP.Credentials = New-Object System.Net.NetworkCredential("$emailfrom",$pass);
    
    	#формируем заголовок и тело письма
    		$msg.Subject = "testmail"
    		$msg.Body = "<h2>hello world</h2>
    		</br>
    		Hi there
    		" 
            #просто так пишем тело на экран, не забыть закомментировать
    	echo $msg.Body
    
    	#Отправляем письмо, не забыть раскомментировать.
    	$smtp.Send($msg)
    как бы просто взять скрипт и надеятся что он будет работать без доработки несколько самонадеянно. ну и в вашем случае, вы точно уверены что 839 гигов свободного места на системном диске - это недостаточно?


    • Изменено Svolotch 16 ноября 2018 г. 7:07
    16 ноября 2018 г. 6:58
  • https://gallery.technet.microsoft.com/scriptcenter/Free-space-on-hard-drive-47e2672c 
    • Помечено в качестве ответа Alex Belov258 16 ноября 2018 г. 7:51
    16 ноября 2018 г. 7:18
  • Я не писал в скрипте мои почтовые сервера т.к их незачем светить!
    16 ноября 2018 г. 7:35
  • test-netconnection server -port 25

    или телнет на 25й порт проходит?

    16 ноября 2018 г. 7:50