none
Не срабатывает скрипт в планировщике по расписанию RRS feed

  • Вопрос

  • В планировщие на Windows Server 2012 R2 есть скрипт:

    $User = "scanuser@DOMAIN.COM"
    $File = "C:\scripts\backup\Password.txt"
    $dayago = get-date (get-date).addDays(-1) -UFormat %Y-%m-%d
    [string[]] $toAddress="auser1@DOMAIN.COM","user2@DOMAIN.COM"
    $MyCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, (Get-Content $File | ConvertTo-SecureString)
    $time = get-date (get-date).addDays(-2) -UFormat %Y-%m-%d
    new-item C:\scripts\backup\$time.txt -itemtype file -force
    $tmpresults = Get-ChildItem -recurse \\backup.fra1.DOMAIN.COM\winbackup\ActiveDirectoryServices\$time | where {$_.Name -like "*.vhdx"} | select CreationTime,Directory,Length,Name
    Foreach ($tmpresult in $tmpresults) {
        "CreationTime : $(get-date $tmpresult.CreationTime -UFormat %T)" | out-file C:\scripts\backup\$time.txt -append
        "Directory : $($tmpresult.Directory)" | out-file C:\scripts\backup\$time.txt -append
        "Length : $($tmpresult.Length/1Gb)" | out-file C:\scripts\backup\$time.txt -append
        "Name : $($tmpresult.Name) `r`n" | out-file C:\scripts\backup\$time.txt -append
    }
    (Get-Content C:\scripts\backup\$time.txt).replace('\\backup.fra1.DOMAIN.COM\winbackup\ActiveDirectoryServices\', '')  | Set-Content C:\scripts\backup\$time.txt
    (Get-Content C:\scripts\backup\$time.txt).replace($time, '')  | Set-Content C:\scripts\backup\$time.txt
    (Get-Content C:\scripts\backup\$time.txt).replace($dayago, '')  | Set-Content C:\scripts\backup\$time.txt
    (Get-Content C:\scripts\backup\$time.txt).replace('WindowsImageBackup\HYPER-1\Backup', '')  | Set-Content C:\scripts\backup\$time.txt
    $body = Get-Content C:\scripts\backup\$time.txt | Out-String
    Send-MailMessage -To $toAddress -From "Scan User <$User>" -Subject "Hyper-V Backup $time" -Body "$body" -SmtpServer smtp.office365.com -Credential $MyCredential -UseSsl

    Если запускать сам сприт в PoSH ISE - работает, почта приходит (есть лог на почтовом сервере)
    Если задачу запускать вручную - работает, почта приходит
    Если задача запускается по расписанию - ошибки нет, статус 0x0, но почта не приходит (нет лога на почтовом сервере)

    что не так?
    Спасибо!

    30 апреля 2018 г. 15:37
    Модератор

Ответы

  • подозреваю что

    Send-MailMessage 

    хочет интерактивный режим, и в Non-interactive работает не корректно.

    Что бы это предположение проверить можно добавить start-transcript (с необходимыми параметрами) в начало скрипта и stop-transrcipt в конец скрипта и посмотреть что будет в логе.

    Если мое предположение вернно, то есть 2 решения:

    1) замена Send-MailMessage, например на это:

    New-Object Net.Mail.SmtpClient($smtpServer)
    2) Запуск задачи только когда пользователь залогинен (можно сделать автологин если очень требуется)


    The opinion expressed by me is not an official position of Microsoft

    Пользую Send-MailMessage в течении пары лет, все отлично.

    Пользователь, от имени которого задание запускается в политиках имеет разрешение на logon as batch-job?

    • Помечено в качестве ответа AnahaymModerator 3 мая 2018 г. 11:01

Все ответы

  • покажите что в настройках задачи

    От кого задача выполняется?


    The opinion expressed by me is not an official position of Microsoft

    30 апреля 2018 г. 15:51
    Модератор
  • от имени пользователя с сохранённым логином и паролем. Выполнять независимо от того, залогинен пользователь или нет:

    30 апреля 2018 г. 16:08
    Модератор
  • подозреваю что

    Send-MailMessage 

    хочет интерактивный режим, и в Non-interactive работает не корректно.

    Что бы это предположение проверить можно добавить start-transcript (с необходимыми параметрами) в начало скрипта и stop-transrcipt в конец скрипта и посмотреть что будет в логе.

    Если мое предположение вернно, то есть 2 решения:

    1) замена Send-MailMessage, например на это:

    New-Object Net.Mail.SmtpClient($smtpServer)
    2) Запуск задачи только когда пользователь залогинен (можно сделать автологин если очень требуется)


    The opinion expressed by me is not an official position of Microsoft

    30 апреля 2018 г. 16:29
    Модератор
  • Используете пути UNC - \\backup.fra1.DOMAIN.COM, а учетную запись не задаете - "Do not store password.  The task will only have access to local computer resources."

    Укажите учетную запись и пароль для задания, у которой есть доступ к \\backup.fra1.DOMAIN.COM и ключ шифрования для $File = "C:\scripts\backup\Password.txt"(или сгенерировать новый под этой УЗ).

    Отвечающий
  • Используете пути UNC - \\backup.fra1.DOMAIN.COM, а учетную запись не задаете - "Do not store password.  The task will only have access to local computer resources."

    Укажите учетную запись и пароль для задания, у которой есть доступ к \\backup.fra1.DOMAIN.COM и ключ шифрования для $File = "C:\scripts\backup\Password.txt"(или сгенерировать новый под этой УЗ).

    не могу задать учётные данные для удаленной системы - там анонимный доступ для всех (даже спрашивайте почему так).

    А вот по первому пункту не понял...

    Net.Mail.SmtpClient пока не пробовал.

    Модератор
  • Если пароль в $File открытым текстом:

    (Get-Content $File | ConvertTo-SecureString -AsPlainText -Force)

    Если в $File SecureString, то надо генерировать от учетной записи под которой выполняется задача:

    $PlainPassword = "P@ssw0rd"
    $SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force
    $SecurePassword | ConvertFrom-SecureString | Out-File $File

    Чтоб точно убедиться, что проблема в строчке,указать  пароль открытым текстом:

    $MyCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, ("Password" | ConvertTo-SecureString -AsPlainText -Force)
    




    Отвечающий
  • я не это имел ввиду, а про UPN и "не хранить пароль".
    Модератор
  • подозреваю что

    Send-MailMessage 

    хочет интерактивный режим, и в Non-interactive работает не корректно.

    Что бы это предположение проверить можно добавить start-transcript (с необходимыми параметрами) в начало скрипта и stop-transrcipt в конец скрипта и посмотреть что будет в логе.

    Если мое предположение вернно, то есть 2 решения:

    1) замена Send-MailMessage, например на это:

    New-Object Net.Mail.SmtpClient($smtpServer)
    2) Запуск задачи только когда пользователь залогинен (можно сделать автологин если очень требуется)


    The opinion expressed by me is not an official position of Microsoft

    Пользую Send-MailMessage в течении пары лет, все отлично.

    Пользователь, от имени которого задание запускается в политиках имеет разрешение на logon as batch-job?

    • Помечено в качестве ответа AnahaymModerator 3 мая 2018 г. 11:01
  • Пользую Send-MailMessage в течении пары лет, все отлично.

    Пользователь, от имени которого задание запускается в политиках имеет разрешение на logon as batch-job?

    нет, не имеет. добавил. заработало! Спасибо!
    Модератор