Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 1
Регистрация: 25.12.2015
Сообщений: 4
1

Не получается отправить письмо

25.12.2015, 09:24. Просмотров 1950. Ответов 4


Добрый день. Стоит задача выполнить синхронизацию папки на сервере (windows 2008 server 32bit) с внешним ресурсом, по результату отправить письмо. Задачу пытаюсь выполнить при помощи скрипта на PowerShell (2.0) в "Планировщике заданий".
Доступ к папке на внешнем ресурсе имеет только пользователь "domain\backup". Задачу запускаю от имени пользователя "domain\backup" с наивысшими правами вне зависимости от регистрации пользователя.
Доступ к папке на сервере дал, в локальных политиках добавил учётку в "Вход в качестве пакетного задания". При этом задание выполняется без ошибок, синхронизация выполняется, а письмо не отправляется.
При этом письма от локального админа отправляются. Подскажите куда копать, скрипт:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
  # путь к логу
    [string]$LogFilePath = ""
  # путь до папки в которой будут храниться резервные копии
    [string]$BackupFolder = ""
  # Указать путь до папки со скриптами
    [string]$BackupScriptFolder = ""
    
  # Путь до папки с бэкапами на внешнем ресурсе
    $outsightCopy="\\IRKL-backup-001\backup\backuppvd\TST"
    
  # Настройки для отправки писем
    # Кому отправлять письма
      $emailTo = ""
    # От кого отправлять письма (надо сообщить название ящика)
      $emailFrom = ""
    # Тема письма
      $emailSubject = "TST synchronize done"
    # Адрес почтового SMTP сервера
      $emailSmtpServer = ""
 
# Удаляем файл логирования
  if (Test-Path $LogFilePath) {Remove-Item -force -Recurse}
      
# Вывод времени начала бэкапа
  "--- Begin robocopy -----------------------------" | Out-File $LogFilePath -append -Encoding utf8
  Get-Date -format dd_MM_yyyy___HH:mm:ss | Out-File $LogFilePath -append -Encoding utf8       
 
# Копирование бэкапа на внешний сервер с докачкой
    # Если папки совпадают то копировать всегда на внешний сервер
      C:\Windows\System32\robocopy.exe $BackupFolder $outsightCopy /LEV:1 /Z /MIR /MAXAGE:7 /LOG:$LogFilePath
  
# Вывод времени окончания бэкапа  
  "--- End robocopy -------------------------------" | Out-File $LogFilePath -append -Encoding utf8
  Get-Date -format dd_MM_yyyy___HH:mm:ss | Out-File $LogFilePath -append -Encoding utf8
 
#Вывод списка файлов в папке с бэкапами
  outsightCopy -force | Out-File $LogFilePath -append -Encoding utf8
  
# Письмо об окончании резервного копирования
  Send-MailMessage -To $emailTo -From $emailFrom -Subject $emailSubject -body (Get-Content $LogFilePath | Out-String) -SmtpServer $emailSmtpServer -Encoding ([System.Text.Encoding]::utf8) | Out-File $LogFilePath -append -Encoding utf8
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2015, 09:24
Ответы с готовыми решениями:

Не получается отправить письмо
idSmtp1.Host := 'SMTP.yandex.ru'; idSmtp1.Port := 25; idSmtp1.Username := 'po4ta0019'; ...

Не получается отправить письмо
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Не получается отправить письмо
Здравствуйте, форумчане. Столкнулся с проблемой: не получается отправить письмо на емайл. На...

Не получается отправить письмо mail()
Привет всем. Недавно я решил немного подучить PHP, в общем стало интересно как отправить письмо...

4
772 / 421 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
25.12.2015, 14:29 2
bazilnick, У вас насколько я понял ведется логгирование.
После запуска задания, лог-файл на каком моменте прекращает запись, или он вообще не создается?
0
0 / 0 / 1
Регистрация: 25.12.2015
Сообщений: 4
28.12.2015, 06:09  [ТС] 3
Лог пустой по поводу отправки письма, из ESI если запускать то так же отрабатывает без ошибок.

Понял что проблема в аутентификации. К сожалению на пшеле нельзя отправлять письма без аутентификации в моём случае. Есть вариант добавить:
PowerShell
-Credential ([System.Management.Automation.PSCredential]::Empty)
Нашёл другие варианты:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1) Encode the credentials on the system where the script will be run:
 
This is widely used to access alternate credentials, of course in this case you wouldn't be using Anonymous, instead you would use some other account that has permisison to send, domain admin or whatnot.   Follow this procedure:
 
One time operation to create the encrypted password file:  
      Read-host -Prompt "enter password" -AsSecureString |
      ConvertFrom-SecureString | Out-File C:\AdminPassword.txt
 
In your script pull in the encrypted string from the file, convert it to a secure string, and cite it as an argument to the your new credential object.  
      $pass = Get-Content C:\AdminPassword.txt | ConvertTo-SecureString
      $creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList <UserName>, $pass
 
Execute the Send-MailMessage command using the -Credential parameter with $creds as it's argument.
Don't forget to fill in your own information for the above commands.   Also make sure you encode the file on the system and logged in under the account that will run the ultimate script.
 
2) You can create an account with very limited access and permission your ReceiveConnectors to allow it to send.  You can combine this approach with option 1 so you can use those credentials in scripts without the same security risks.
 
3) If you really want to send using the Anonymous account you'll run into a problem.  I appreciate the suggestion to use an empty credential object, but the cmdlet isn't expecting that.  Using Anonymous requires a credential object an Anonymous user but with an "empty" password.  You cannot pass a null or empty string as the password argument in the New-Object command I previously showed.  In fact that argument expects a SecureString object, what's worse is you cannot pass an empty or null string to ConverTo-SecureString so you can't prep your argument beforehand.  The question becomes, how can you get an empty string into a SecureString Object?  Well Read-Host -AsSecureString can do it, if you just hit enter at the prompt. But that's interactive and won't serve us if we want this script to run by itself .  Moreover, I assume if we attempted to take the output of Read-Host and put it in a file as we did in option 1 above we would again have issues with ConvertToSecure-String not liking the empty string.  The solution to this dilemma is kind of crafty:
 
   Use a any old string instead of a empty string:     
      $pass = ConvertTo-SecureString "whatever" -asplaintext -force
      $creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "NT AUTHORITY\ANONYMOUS LOGON", $pass
 
   Execute the Send-MailMessage command using the -Credential parameter with $creds as it's argument.  
Hard to believe but this actually works.  The obvious benefit of this approach is you don't need to store or create anything, and you can use Anonymous instead of a real account with potentially greater and/or more dangerous access.  Even though options 1 & 2 are pretty secure many administrators or even security officers may have a problem with stored credentials.  There's certainly potential for abuse, but option number 3 seems to work completely with no exposure other than what's been explicitly granted Anonymous.
P.S. Пока попросил права для отправки писем от имени учётки для бэкапов, если не дадут, то опробую варианты выше, отпишусь.
0
0 / 0 / 1
Регистрация: 25.12.2015
Сообщений: 4
13.01.2016, 12:27  [ТС] 4
Сделал по первому варианту и получаю следующую ошибку при монтировании диска при помощи "New-PSDrive":
Поставщиком не поддерживается использование учетных данных. Выполните операцию повторно без указания учетных данных.

Пробовал в локальных политиках выставлять "уровень проверки подлинности Lan Manager" - "Отправлять LM и NTLM - использовать сеансовую безопасность NTLMv2 при согласовании". Без шифрованного пароля "Net Use" и "New-PSDrive" работают. Подскажите в чём может быть беда.
0
0 / 0 / 1
Регистрация: 25.12.2015
Сообщений: 4
15.01.2016, 08:52  [ТС] 5
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Решено: недочёт PowerShell 2, поставил PowerShell 3 и всё заработало.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2016, 08:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Не получается отправить письмо с русскими буквами
Добрый день, есть php файл с функцией отправки письма. Кодировка UTF-8. Не получается отправить...

Не получается отправить письмо. Не пойму в чем ошибка
Вот мой код. Не пойму в чем дело, можете помочь разобраться? string mailAssignedTo...

При попытке отправить письмо с почты mail.ru приходит ответное письмо с содержанием, что письмо не отправлено
При попытке отправить письмо с почты mail.ru приходит ответное письмо с содержанием, что письмо не...

Отправить письмо
Здравствуйте , нужно отправить письмо используя php , как это можно сделать? Я находил примеры, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.