Task Scheduler does not execute batch file
I have a batch file to run a powershell program. When I double click the batch file, it runs the powershell code for
- create EXCEL table
- write this EXCEL spreadsheet
I can even see this action taking place.
However, when I use the Task Scheduler to execute the batch file, it will run, but it will not generate the EXCEL spreadsheet and of course it will not send email to the EXCEL spreadsheet.
I have created other tasks to run other batch programs to run powershell programs and I never had this problem.
I manually run the batch file with the same permissions as in Task Scheduler and has no problem.
I have specified the full path to the batch file in Task Scheduler.
How can I start troubleshooting this issue?
ADDITIONAL INFORMATION
Here is the whole script, generate_GUPs_report.ps1
$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
<#Previously created password file in D:\Script\central_cred.txt, read-host -assecurestring | convertfrom-securestring | out-file D:\Script\central_cred.txt#>
$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 > 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 > 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 > 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"
And here is the contents of the batch file that is executed if I double clicked, but not if I schedule via Task Scheduler
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe D:\Script\generate_GUPs_report.ps1
And here is the action in the task planner
I had a similar problem while trying to schedule a script that automates Microsoft Word. In my case, I was eventually able to work around this by setting the DCOM ID.
Actions
- Start> Run:
dcomcnfg
- If you are running 32-bit office on 64-bit OS, use
mmc comexp.msc /32
- If you are running 32-bit office on 64-bit OS, use
- Expand
Component Services
>Computers
>My Computer
>DCOM Config
- To find
Microsoft Excel Application
- Right-click, tab
Properties
,Identity
. - Set it to
This user
and enter the same credentials that you entered for the scheduled task.