none
PowerShell и Task Scheduler RRS feed

  • Вопрос

  • Доброго времени суток. Возникла проблема, есть скрипт который отлично работает в  Windows PowerShell ISE и выполняет всё что от него нужно. Как результат работы скрипта приходит письмо содержащие значения переменных полученных в результате работы.  Пытаясь запускать скрипт посредством Task Scheduler столкнулся с тем что всё отрабатывает и ошибок нет, но письмо приходит без значения переменных. 

    Пробовал на Windows Server 2003  и 2008 R2

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

    Task Scheduler строка Run: C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe C:\Scripts\printers_week.ps1



    11 июня 2014 г. 13:45

Ответы

  • А почему у Вас $Body,перед переменными стоит? Должна стоять после  $total = $delta_p1+$delta_p2+$delta_p3

    $total = $delta_p1+$delta_p2+$delta_p3
    
    $Body = " Данные счетчиков:
    $data_month			$data
    Xerox4	$old_data_p1		|	$new_data_p1
    Xerox5	$old_data_p2		|	$new_data_p2
    Xerox6	$old_data_p3		|	$new_data_p3
    		
    Отпечатано страниц за месяц всего = $total
    Xerox4(SN:2233141170)  = $delta_p1
    Xerox5(SN:2233140417)  = $delta_p2
    Xerox6(SN:2233865659)  = $delta_p3" 
    
    $message = New-Object System.Net.Mail.MailMessage –ArgumentList $EmailFrom, $EmailTo, $Subject, $Body
    $smtp = New-Object System.Net.Mail.SMTPClient –ArgumentList $SmtpServer
    $smtp.Send($message)

    • Помечено в качестве ответа AKrykun 11 июня 2014 г. 16:42
    11 июня 2014 г. 15:06
    Отвечающий

Все ответы

  • 1) Привести код скрипта

    2) Галочка в задании стоит Run whether user is logged on or not?

    3) Если подключение осуществляется к сетевым объектам,то убрать Do not store password галочку. 

    4) Пользователь один и тотже под,которым успешно выполняется скрипт и в task scheduler?
    • Изменено KazunEditor 11 июня 2014 г. 14:05
    11 июня 2014 г. 14:04
    Отвечающий
  • 1)

    $EmailFrom = “xxx1@mail.com”
    $EmailTo = “xxx1@mail.com”
    $Subject = “Отчет по принтерам за месяц”
    $Body = “ Данные счетчиков:
    $data_month			$data
    Xerox4	$old_data_p1		|	$new_data_p1
    Xerox5	$old_data_p2		|	$new_data_p2
    Xerox6	$old_data_p3		|	$new_data_p3
    		
    Отпечатано страниц за месяц всего = $total
    Xerox4(SN:2233141170)  = $delta_p1
    Xerox5(SN:2233140417)  = $delta_p2
    Xerox6(SN:2233865659)  = $delta_p3" 
    $SmtpServer = “mail.com”
    
    $data = Get-Date 
    $data_month = (Get-Date).AddMonths(-1) 
    
    $get_p1 = snmpget -c public -v 1 192.168.8.36 .1.3.6.1.4.1.253.8.53.13.2.1.6.1.20.1 
    $get_p2 = snmpget -c public -v 1 192.168.8.37 .1.3.6.1.4.1.253.8.53.13.2.1.6.1.20.1
    $get_p3 = snmpget -c public -v 1 192.168.8.38 .1.3.6.1.4.1.253.8.53.13.2.1.6.1.20.1
    
    $new_data_p1 = $get_p1.split(' ')[3] 
    $old_data_p1 = Get-Content -path C:\temp\xerox1_last.txt | Select-Object -Last 1 
    $delta_p1 = $new_data_p1 - $old_data_p1 
    Out-file -FilePath C:\temp\xerox1_all.txt -inputobject $data, $get_p1.split(' ')[3] -Append 
    Out-file -FilePath C:\temp\xerox1_last.txt -inputobject $get_p1.split(' ')[3] 
    
    $new_data_p2 = $get_p2.split(' ')[3] 
    $old_data_p2 = Get-Content -path C:\temp\xerox2_last.txt | Select-Object -Last 1 
    $delta_p2 = $new_data_p2 - $old_data_p2 
    Out-file -FilePath C:\temp\xerox2_all.txt -inputobject $data, $get_p2.split(' ')[3] -Append 
    Out-file -FilePath C:\temp\xerox2_last.txt -inputobject $get_p2.split(' ')[3] 
    
    $new_data_p3 = $get_p3.split(' ')[3] 
    $old_data_p3 = Get-Content -path C:\temp\xerox3_last.txt | Select-Object -Last 1 
    $delta_p3 = $new_data_p3 - $old_data_p3 
    Out-file -FilePath C:\temp\xerox3_all.txt -inputobject $data, $get_p3.split(' ')[3] -Append 
    Out-file -FilePath C:\temp\xerox3_last.txt -inputobject $get_p3.split(' ')[3] 
    
    $total = $delta_p1+$delta_p2+$delta_p3
    
    $message = New-Object System.Net.Mail.MailMessage –ArgumentList $EmailFrom, $EmailTo, $Subject, $Body
    $smtp = New-Object System.Net.Mail.SMTPClient –ArgumentList $SmtpServer
    $smtp.Send($message)

    2)Стоит.

    3)К сетевым объектам подключения нет, только запрос по snmp, но с галочками уже пробовал.

    4)Пользователь одинаков. 

    Играясь также заметил что скрипт работает только в  ISE, запуск с командной строки дал результат аналогичный task scheduler.


    • Изменено AKrykun 11 июня 2014 г. 14:55
    11 июня 2014 г. 14:52
  • А почему у Вас $Body,перед переменными стоит? Должна стоять после  $total = $delta_p1+$delta_p2+$delta_p3

    $total = $delta_p1+$delta_p2+$delta_p3
    
    $Body = " Данные счетчиков:
    $data_month			$data
    Xerox4	$old_data_p1		|	$new_data_p1
    Xerox5	$old_data_p2		|	$new_data_p2
    Xerox6	$old_data_p3		|	$new_data_p3
    		
    Отпечатано страниц за месяц всего = $total
    Xerox4(SN:2233141170)  = $delta_p1
    Xerox5(SN:2233140417)  = $delta_p2
    Xerox6(SN:2233865659)  = $delta_p3" 
    
    $message = New-Object System.Net.Mail.MailMessage –ArgumentList $EmailFrom, $EmailTo, $Subject, $Body
    $smtp = New-Object System.Net.Mail.SMTPClient –ArgumentList $SmtpServer
    $smtp.Send($message)

    • Помечено в качестве ответа AKrykun 11 июня 2014 г. 16:42
    11 июня 2014 г. 15:06
    Отвечающий
  • Спасибо. 

    И в правду не на своем месте,  нужно больше отдыхать.

    11 июня 2014 г. 16:44