title: Task Scheduler doesn't execute batch file properly
body: <p>I have a batch file to run a powershell program. When I double click the batch file, it runs the powershell code to</p>
  
  <ol>
  <li>generate an EXCEL spreadsheet</li>
  <li>email this EXCEL spreadsheet</li>
  </ol>
  
  <p>I even see this action happening.</p>
  
  <p>However, when I use Task Scheduler to execute the batch file, it will run, but it will neither generate an EXCEL spreadsheet, and it certainly won't email the EXCEL spreadsheet.</p>
  
  <p>I have created other tasks to run other batch programs to execute powershell programs, and I never had this problem.</p>
  
  <p>I manually run the batch file with the same permissions used in the Task Scheduler, and have no problem.</p>
  
  <p>I specified the complete path of the batch file in the Task Scheduler.</p>
  
  <p>How do I even start troubleshooting this?</p>
  
  <p>MORE INFORMATION</p>
  
  <p>Here is the entire script, generate_GUPs_report.ps1</p>
  
  <pre><code>$DSN = 'Schools SQL Server ODBC'
  $DirectoryToSave='D:\Script\'
  $Filename='Daily_GUP_Report' 
  $password = $NULL
  $credentials = $NULL
  $password = $NULL
  $conn = $NULL
  $cmd = $NULL
  $k = $NULL
  
  # constants
  
  $xlCenter=-4108 
  $xlTop=-4160 
  $xlOpenXMLWorkbook=[int]51 
  
  
  &lt;#Previously created password file in D:\Script\central_cred.txt, read-host -assecurestring | convertfrom-securestring | out-file D:\Script\central_cred.txt#&gt;
  $password = get-content D:\Script\central_cred.txt | convertto-securestring
  $credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "sem5",$password
  
  $username = $credentials.UserName
  $password = $credentials.GetNetworkCredential().Password
  
  
  # SQL Query
  
  $SQL1 = "SELECT
      dbo.V_SEM_COMPUTER.COMPUTER_NAME, dbo.V_SEM_COMPUTER.IP_ADDR1_TEXT as IP_Address, EVENT_DESC as Successful_GUP_Download
  FROM
      dbo.V_AGENT_SYSTEM_LOG,  dbo.V_SEM_COMPUTER
  WHERE
      EVENT_SOURCE = 'sylink'
      and (EVENT_DESC LIKE '%Downloaded new content update from Group Update Provider successfully.%'
          or EVENT_DESC LIKE '%Downloaded content from GUP%')
      and dbo.V_AGENT_SYSTEM_LOG.TIME_STAMP &gt; DATEDIFF(second, '19700101', DATEADD(day, -1, GETDATE()))  * CAST(1000 as bigint)
      and dbo.V_SEM_COMPUTER.COMPUTER_ID = dbo.V_AGENT_SYSTEM_LOG.COMPUTER_ID
  ORDER BY
      dbo.V_AGENT_SYSTEM_LOG.TIME_STAMP DESC"
  
  
  $SQL2 = "SELECT
      COUNT(DISTINCT EVENT_DESC) AS Number_of_distinct_GUP_downloads_past_24hrs,COUNT(DISTINCT dbo.V_SEM_COMPUTER.COMPUTER_NAME) AS Number_of_Computer_successfully_downloaded_from_GUP_past_24hrs
  FROM
      dbo.V_AGENT_SYSTEM_LOG,  dbo.V_SEM_COMPUTER
  WHERE
      EVENT_SOURCE = 'sylink'
      and (EVENT_DESC LIKE '%Downloaded new content update from Group Update Provider successfully.%'
          or EVENT_DESC LIKE '%Downloaded content from GUP%')
      and dbo.V_AGENT_SYSTEM_LOG.TIME_STAMP &gt; DATEDIFF(second, '19700101', DATEADD(day, -1, GETDATE()))  * CAST(1000 as bigint)
      and dbo.V_SEM_COMPUTER.COMPUTER_ID = dbo.V_AGENT_SYSTEM_LOG.COMPUTER_ID"
  
  $SQL3 = "SELECT 
      dbo.V_SEM_COMPUTER.COMPUTER_NAME, dbo.V_SEM_COMPUTER.IP_ADDR1_TEXT as IP_Address, COUNT(*) as Number_of_Occurrences_in_Successful_GUP_Downloads_Log
  FROM 
      dbo.V_AGENT_SYSTEM_LOG, dbo.V_SEM_COMPUTER
  WHERE
      EVENT_SOURCE = 'sylink'
      and (EVENT_DESC LIKE '%Downloaded new content update from Group Update Provider successfully.%'
          or EVENT_DESC LIKE '%Downloaded content from GUP%')
      and dbo.V_AGENT_SYSTEM_LOG.TIME_STAMP &gt; DATEDIFF(second, '19700101', DATEADD(day, -1, GETDATE()))  * CAST(1000 as bigint)
      and dbo.V_SEM_COMPUTER.COMPUTER_ID = dbo.V_AGENT_SYSTEM_LOG.COMPUTER_ID
  GROUP BY
      dbo.V_SEM_COMPUTER.COMPUTER_NAME, dbo.V_SEM_COMPUTER.IP_ADDR1_TEXT
  ORDER BY
      Number_of_Occurrences_in_Successful_GUP_Downloads_Log DESC" 
  
  
  
  # Create Excel file to save the data
  
  if (!(Test-Path -path "$DirectoryToSave")) #create it if not existing 
    { 
    New-Item "$DirectoryToSave" -type directory | out-null 
    } 
  
  $excel = New-Object -Com Excel.Application
  $excel.Visible = $True
  $wb = $Excel.Workbooks.Add()
  $currentWorksheet=1
  
  $ws = $wb.Worksheets.Item(1)
  $ws.name = "GUP Download Activity"
  
  
  $qt = $ws.QueryTables.Add("ODBC;DSN=$DSN;UID=$username;PWD=$password", $ws.Range("A1"), $SQL1)
  
  if ($qt.Refresh()){
      $ws.Activate()
      $ws.Select()
      $excel.Rows.Item(1).HorizontalAlignment = $xlCenter
      $excel.Rows.Item(1).VerticalAlignment = $xlTop
      $excel.Rows.Item("1:1").Font.Name = "Calibri" 
      $excel.Rows.Item("1:1").Font.Size = 11 
      $excel.Rows.Item("1:1").Font.Bold = $true 
  }
  
  $ws = $wb.Worksheets.Item(2)
  $ws.name = "Totals"
  
  
  $qt = $ws.QueryTables.Add("ODBC;DSN=$DSN;UID=$username;PWD=$password", $ws.Range("A1"), $SQL2)
  
  if ($qt.Refresh()){
      $ws.Activate()
      $ws.Select()
      $excel.Rows.Item(1).HorizontalAlignment = $xlCenter
      $excel.Rows.Item(1).VerticalAlignment = $xlTop
      $excel.Rows.Item("1:1").Font.Name = "Calibri" 
      $excel.Rows.Item("1:1").Font.Size = 11 
      $excel.Rows.Item("1:1").Font.Bold = $true 
   }
  
  
  $ws = $wb.Worksheets.Item(3)
  $ws.name = "GUP Downloads per Computer"
  
  
  $qt = $ws.QueryTables.Add("ODBC;DSN=$DSN;UID=$username;PWD=$password", $ws.Range("A1"), $SQL3)
  
  if ($qt.Refresh()){
      $ws.Activate()
      $ws.Select()
      $excel.Rows.Item(1).HorizontalAlignment = $xlCenter
      $excel.Rows.Item(1).VerticalAlignment = $xlTop
      $excel.Rows.Item("1:1").Font.Name = "Calibri" 
      $excel.Rows.Item("1:1").Font.Size = 11 
      $excel.Rows.Item("1:1").Font.Bold = $true 
   }
  
  $filename = "D:\Script\Daily_GUP_Report.xlsx"
  if (test-path $filename ) { rm $filename } 
  $wb.SaveAs($filename,  $xlOpenXMLWorkbook) #save as an XML Workbook (xslx) 
  $wb.Saved = $True #flag it as being saved 
  $wb.Close() #close the document 
  $Excel.Quit() #and the instance of Excel 
  $wb = $Null #set all variables that point to Excel objects to null 
  $ws = $Null #makes sure Excel deflates 
  $Excel=$Null #let the air out 
  
  Start-Process "D:\Script\send_GUP_report_schools.bat"
  </code></pre>
  
  <p>And here are the contents of the batch file that runs if I double-click, but not if I schedule through Task Scheduler</p>
  
  <pre><code>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe D:\Script\generate_GUPs_report.ps1
  </code></pre>
  
  <p>And here is action in Task Scheduler</p>
  
  <p><img src="https://i.stack.imgur.com/Z3fyt.png" alt="enter image description here"></p>