Forum Discussion
PowerShell doens't run correctly from scheduled task Job
Hi All,
I'm trying to schedule a job in task scheduler which has a powershell code and needs to run on every wednesday to get the share point online calendar to get updated.
Below is the code I've written to connect to the On prem sharepoint site, retrieve all the details and get it updated to SharePoint Online calendar site.
# Install the SharePoint PnP PowerShell <module if not already installed>
# Install-Module -Name PnP.PowerShell -Force -AllowClobber
#Install-Module -Name PnP.Powershell
Import-Module "C:\Users\pnp_3.29\SharePointPnPPowerShellOnline.psd1" -DisableNameChecking
# Connect to the SharePoint site
$siteUrl = "<URL>"
$siteUrlDestination = "<URL>"
# Specify Calendar list name
$listName = "Calendar"
$listNameDestination = "CalenderNew"
$ResultColl = @()
$cred = Import-Clixml -Path "C:\Users\creds.xml"
Connect-PnPOnline -Url $siteUrl -Credentials $cred
# Retrieve items from the Calendar list
$calendarData = Get-PnPListItem -List $listName
#Get All Field Values from the List Item
$FieldValuescol = $calendarData.FieldValues
foreach ($FieldValues in $FieldValuescol)
{
$Result = new-object PSObject
$Result | add-member -membertype NoteProperty -name "Title" -Value $FieldValues.Title
$Result | add-member -membertype NoteProperty -name "Type Of Leave" -Value $FieldValues.Type_x0020_Of_x0020_Leave
$Result | add-member -membertype NoteProperty -name "All Day Event" -Value $FieldValues.fAllDayEvent
$Result | add-member -membertype NoteProperty -name "Start Time" -Value $FieldValues.EventDate
$Result | add-member -membertype NoteProperty -name "EndTime" -Value $FieldValues.EndDate
$Result | add-member -membertype NoteProperty -name "Half Day" -Value $FieldValues.Half_x0020_Day
$Result | add-member -membertype NoteProperty -name "Number of Working Days" -Value $FieldValues.Number_x0020_of_x0020_Working_x0
$Result | add-member -membertype NoteProperty -name "Description" -Value $FieldValues.Description
$Result | add-member -membertype NoteProperty -name "Team" -Value $FieldValues.Team
$ResultColl += $Result
}
#$ResultColl #| Export-Csv $outputPath -NoTypeInformation
# Disconnect from the SharePoint site
Disconnect-PnPOnline
#Destination
Connect-PnPOnline -Url $siteUrlDestination -UseWebLogin
#remove all existing items
# Get all items from the list
$items = Get-PnPListItem -List $listNameDestination
# Loop through each item and delete it
foreach ($item in $items) {
Remove-PnPListItem -List $listNameDestination -Identity $item.Id -Force
}
#refresh the list
foreach ($res in $ResultColl)
{
$itemProperties = @{
Title = $res.Title
Type_x0020_Of_x0020_Leave = $res.'Type Of Leave'
fAllDayEvent = $res.'All Day Event'
EventDate = $res.'Start Time'
EndDate = $res.'EndTime'
Half_x0020_Day = $res.'Half Day'
Number_x0020_of_x0020_Working_x0 = $res.'Number of Working Days'
Description = $res.Description
Team = $res.Team
}
Add-PnPListItem -List $listNameDestination -Values $itemProperties
}
Disconnect-PnPOnline
Microsoft Windows 10 Enterprise
Scheduled Task -
Program/Script: powershell.exe
Arguments: –Noninteractive –Noprofile –Command "& {C:\Users\usernameLeave_extraction_script.ps1'}"
Run whether user is logged on or not (have tried this both ways)
Scheudule task doesn't run correctly even when a user is logged in and we force the task to run.
Script runs perfectly when we manually run it.
And doesn't display any error, the job gets starts and closes immediately.
- I guess adding import-module PnP.Powershell should fix that. (Add it as the second line in the script after the Start-Transcript)
12 Replies
- First, the suggestion is to add "Start-Transcript c:\temp\log.txt" at the start of the script and a "Stop-Transcript" at the end. This way, you will see the errors while executing in c:\temp\log.txt...
- GNavyaCopper Contributor
Hi Harm_Veenstra ,
Thanks for the input shared, I have tried to update the code with Start-Transcript c:\temp\log.txt at the top and a Stop-Transcript at th ebottom and when I run the script manually it creates the log file but when I run it in scheduled task does not create the file.- Then it doesn't start at all, so it seems... Could you update the Scheduled Task:
Microsoft Windows 10 Enterprise
Scheduled Task -
Program/Script: powershell.exe
Arguments: C:\Users\usernameLeave_extraction_script.ps1'
Do you run it as System or a user? Does that user have access to the folder in which the script is located?