Quantcast
Channel: Task Scheduler Managed Wrapper
Viewing all 2206 articles
Browse latest View live

New Post: How to connect remote servers tasks scheduler

$
0
0

Hi dahall

I have following 2003 server

Windows Server 2003, Standard Edition
Build 3790 (Service Pack 2)

Ajay

 

 


New Post: Unauthorized Exception when creating/deleting tasks

$
0
0

I haven't tried your specific scenario, but the Scheduled Tasks applet uses the same base COM library as this library. I would expect that you will need to specify the username and logontype of S4U or InteractiveToken in the RegisterTaskDefinition method and ensure that your settings in code match the settings of those tasks created using the applet.

New Post: How to connect remote servers tasks scheduler

$
0
0

2008 can see tasks on other 2008 and 2003 servers. 2003 can only see other 2003.

New Post: Unauthorized Exception when creating/deleting tasks

$
0
0

This is the latest code I tried. I'm pretty sure I'm just missing something small. Your help is greatly appreciated:


var taskDef = ts.NewTask();

if (ts.HighestSupportedVersion >= new Version(1, 2))
{
	taskDef.Principal.RunLevel = TaskRunLevel.LUA;
}
else
{
	taskDef.Settings.RunOnlyIfLoggedOn = true;
}

string userId = string.Concat(Environment.UserDomainName, "\\", Environment.UserName);

taskDef.Principal.LogonType = TaskLogonType.S4U;
taskDef.Principal.UserId = userId;

taskDef.RegistrationInfo.Description = string.Format(
							Resources.Scheduled_Task_Desc_Format,
							this.TargetEntity.FriendlyName
						);
taskDef.Triggers.Add(GetTrigger(_syncSettingsViewModel.Interval));
taskDef.Actions.Add(
				new ExecAction(
					Assembly.GetEntryAssembly().Location,
					"-s " + GetSyncFlowName(this.TargetEntity)
				)
			);


ts.RootFolder.RegisterTaskDefinition(
				taskName, 
				taskDef,
				TaskCreation.CreateOrUpdate,
				userId,
				LogonType: TaskLogonType.S4U
			);

New Post: Unauthorized Exception when creating/deleting tasks

New Post: Unauthorized Exception when creating/deleting tasks

$
0
0

For everyone's benefit, here is the simplified code to make this work for non-admin users on XP and Win7

 


var taskDef = ts.NewTask();

taskDef.Settings.ExecutionTimeLimit = TimeSpan.FromMinutes(15);
taskDef.RegistrationInfo.Description = "My Task";

taskDef.Actions.Add(new ExecAction(
					Assembly.GetEntryAssembly().Location,
					"-myArgs"
				)
			);

string userId = string.Concat(Environment.UserDomainName, "\\", Environment.UserName);
TaskLogonType logonType;
if (ts.HighestSupportedVersion >= _v2)
{
	taskDef.Principal.RunLevel  = TaskRunLevel.LUA;
	taskDef.Principal.LogonType = logonType = TaskLogonType.S4U;
	taskDef.Principal.UserId    = userId;
	taskDef.Triggers.Add(GetTrigger(interval));
}
else // For Windows XP
{
	taskDef.Settings.RunOnlyIfLoggedOn = true;
	logonType = TaskLogonType.InteractiveToken;

	// Avoid System.ArgumentException: 
	//       Trigger.Repetition.Interval must be less than 
	//       Trigger.Repetition.Duration under Task Scheduler 1.0
	var trigger   = GetTrigger(interval);
	trigger.Repetition.Duration = trigger.Repetition.Interval.Add(TimeSpan.FromMinutes(1));
	trigger.Repetition.StopAtDurationEnd = false;
	taskDef.Triggers.Add(trigger);
}

var taskFolder = GetTaskFolder(ts);
taskFolder.RegisterTaskDefinition(
				taskName,
				taskDef,
				TaskCreation.CreateOrUpdate,
				userId,
				LogonType: logonType
			);
		
// Add this helper method		
private TaskFolder GetCeligoTaskFolder(TaskService ts)
{
	if (ts.HighestSupportedVersion >= _v2)
	{
		return ts.RootFolder
				 .SubFolders
				 .FirstOrDefault(f => f.Name == "MyTaskFolder")
				 ?? ts.RootFolder.CreateFolder("MyTaskFolder");
	}
	else
	{
		return ts.RootFolder;
	}
}

Created Issue: Displayed Tasks not showing correct Status nor NextRunTime [10348]

$
0
0
We have tasks listed in a folder on our Windows Server 2008 R2, and can loop through tasks, however, items aren't showing correct information.

Our setup:
Task Scheduler > Reports > DailyExcelReport1
Task Scheduler > Reports > DailyExcelReport2
Task Scheduler > Reports > DailyExcelReport3
and so on...

To access it via code:

var state = "";
var NextRunTime;

using (var taskService = new TaskService("servername", "username", "DOMAIN", "password1"))
{
if (taskService.Connected)
{
var tasks = taskService.GetFolder("Reports").Tasks;
foreach (var task in tasks)
{
State = task.State.ToString(); // it's showing 'Ready' even while its 'Running' on Task Scheduler
NextRunTime = task.NextRunTime; // it's showing 12/30/1899 12:00:00 AM
}
}

On the Task Scheduler:

Details for DailyExcelReport Task --
Weekly; At 7:00 am every Mon, Tues, Wed, Thurs, Fri; Status: enabled

Any ideas?

Thanks,
-rob

New Post: Displayed Tasks not showing correct Status nor NextRunTime

$
0
0

We have tasks listed in a folder on our Windows Server 2008 R2, and can loop through tasks, however, items aren't showing correct information.

 

NextRunTime; // it's showing 12/30/1899 12:00:00 AM

Status // it's showing 'Ready' even while its 'Running' on Task Scheduler

 


Our setup:
Task Scheduler > Reports > DailyExcelReport1
Task Scheduler > Reports > DailyExcelReport2
Task Scheduler > Reports > DailyExcelReport3
and so on...

To access it via code:

var State = "";
var NextRunTime;

using (var taskService = new TaskService("servername", "username", "DOMAIN", "password1"))
{
  if (taskService.Connected)
  {
    var tasks = taskService.GetFolder("Reports").Tasks;�
    foreach (var task in tasks)
    {
      State = task.State.ToString(); // it's showing 'Ready' even while its 'Running' on Task Scheduler
      NextRunTime = task.NextRunTime; // it's showing 12/30/1899 12:00:00 AM
    }
  }
}
On the Task Scheduler:

Details for DailyExcelReport Task --
Weekly; At 7:00 am every Mon, Tues, Wed, Thurs, Fri; Status: enabled

Any ideas?

Thanks,
-rob


Created Issue: how to get task from remote server [10350]

$
0
0
Hi ALL

I Want to call remotely windows task scheduler for this i am using Microsoft.Win32.TaskScheduler.dll and created object of TaskService class like

TaskService 01_server = getTaskService("\\\\123.122.222.222", "administrator", "domain1", "pwd0", true);
TaskService 02_server = getTaskService("\\\\123.122.222.222", "administrator", "domain1", "pwd1", true);

and bind task to grodview

for server 01_serve
DataTable dataTable = new DataTable();
dataTable.Columns.Add("TaskName");
dataTable.Columns.Add("TaskSchedule");
dataTable.Columns.Add("TaskNextRun");
dataTable.Columns.Add("TaskLastRun");
dataTable.Columns.Add("State");
dataTable.AcceptChanges();

DataRow dataRow;
StringBuilder sbTaskSchedule = new StringBuilder();

Version ver = 01_server .HighestSupportedVersion;
bool newVer = (ver >= new Version(1, 2));

TaskFolder tf = 01_serve.RootFolder;


int ctaskNx =01_serve.RootFolder.Tasks.Count;

for (int i = 0; i < ctaskNx; i++)
{

m_Task = 01_serve.RootFolder.Tasks[i];

string strFileNamePath = m_Task.Definition.Actions.ToString().Trim();

if (strFileNamePath.Contains(".vbs"))
{
dataRow = dataTable.NewRow();
dataRow["TaskName"] = m_Task.Name.ToString().Trim();
dataRow["TaskNextRun"] = m_Task.NextRunTime.ToString().Trim();
dataRow["TaskLastRun"] = m_Task.LastRunTime.ToString().Trim();
dataRow["State"] = m_Task.State.ToString().Trim();
dataTable.Rows.Add(dataRow);
dataTable.AcceptChanges();
}
}

for server 02_serve

Version ver = 02_server .HighestSupportedVersion;
bool newVer = (ver >= new Version(1, 2));

TaskFolder tf = 02_server.RootFolder;


int ctaskNx = 02_server.RootFolder.Tasks.Count;

for (int i = 0; i < ctaskNx; i++)
{

m_Task = 02_server.RootFolder.Tasks[i];

string strFileNamePath = m_Task.Definition.Actions.ToString().Trim();

if (strFileNamePath.Contains(".vbs"))
{
dataRow = dataTable.NewRow();
dataRow["TaskName"] = m_Task.Name.ToString().Trim();
dataRow["TaskNextRun"] = m_Task.NextRunTime.ToString().Trim();
dataRow["TaskLastRun"] = m_Task.LastRunTime.ToString().Trim();
dataRow["State"] = m_Task.State.ToString().Trim();
dataTable.Rows.Add(dataRow);
dataTable.AcceptChanges();
}
}

but i am not able to get task from remote server
please guide me where i am wrong

thanks
vinod

Commented Issue: how to get task from remote server [10350]

$
0
0
Hi ALL

I Want to call remotely windows task scheduler for this i am using Microsoft.Win32.TaskScheduler.dll and created object of TaskService class like

TaskService 01_server = getTaskService("\\\\123.122.222.222", "administrator", "domain1", "pwd0", true);
TaskService 02_server = getTaskService("\\\\123.122.222.222", "administrator", "domain1", "pwd1", true);

and bind task to grodview

for server 01_serve
DataTable dataTable = new DataTable();
dataTable.Columns.Add("TaskName");
dataTable.Columns.Add("TaskSchedule");
dataTable.Columns.Add("TaskNextRun");
dataTable.Columns.Add("TaskLastRun");
dataTable.Columns.Add("State");
dataTable.AcceptChanges();

DataRow dataRow;
StringBuilder sbTaskSchedule = new StringBuilder();

Version ver = 01_server .HighestSupportedVersion;
bool newVer = (ver >= new Version(1, 2));

TaskFolder tf = 01_serve.RootFolder;


int ctaskNx =01_serve.RootFolder.Tasks.Count;

for (int i = 0; i < ctaskNx; i++)
{

m_Task = 01_serve.RootFolder.Tasks[i];

string strFileNamePath = m_Task.Definition.Actions.ToString().Trim();

if (strFileNamePath.Contains(".vbs"))
{
dataRow = dataTable.NewRow();
dataRow["TaskName"] = m_Task.Name.ToString().Trim();
dataRow["TaskNextRun"] = m_Task.NextRunTime.ToString().Trim();
dataRow["TaskLastRun"] = m_Task.LastRunTime.ToString().Trim();
dataRow["State"] = m_Task.State.ToString().Trim();
dataTable.Rows.Add(dataRow);
dataTable.AcceptChanges();
}
}

for server 02_serve

Version ver = 02_server .HighestSupportedVersion;
bool newVer = (ver >= new Version(1, 2));

TaskFolder tf = 02_server.RootFolder;


int ctaskNx = 02_server.RootFolder.Tasks.Count;

for (int i = 0; i < ctaskNx; i++)
{

m_Task = 02_server.RootFolder.Tasks[i];

string strFileNamePath = m_Task.Definition.Actions.ToString().Trim();

if (strFileNamePath.Contains(".vbs"))
{
dataRow = dataTable.NewRow();
dataRow["TaskName"] = m_Task.Name.ToString().Trim();
dataRow["TaskNextRun"] = m_Task.NextRunTime.ToString().Trim();
dataRow["TaskLastRun"] = m_Task.LastRunTime.ToString().Trim();
dataRow["State"] = m_Task.State.ToString().Trim();
dataTable.Rows.Add(dataRow);
dataTable.AcceptChanges();
}
}

but i am not able to get task from remote server
please guide me where i am wrong

thanks
vinod
Comments: ** Comment from web user: vinodpanna **

Hi All please guide me how to get task from remote server

New Post: How can I edit the NextRunTime for an existing Task

$
0
0

Hi all,

I have a task which created manually. Each time it runs, I need to check some conditions from my Database to determine its NextRunTime but NexRunTime property is readonly.

How can I change the NextRunTime value or is there anyway to define its next run time ?

Thanks for your help.

New Post: How can I edit the NextRunTime for an existing Task

$
0
0

NextRunTime is calculated internally by looking at all the triggers and determining when they will all execute. The only way to change it is by changing some or all of the triggers associated with the task.

New Post: Displayed Tasks not showing correct Status nor NextRunTime

New Post: how to get task from remote server

$
0
0

Hi ALL

I Want to call remotely windows task scheduler for this i am using Microsoft.Win32.TaskScheduler.dll and created object of TaskService class like

TaskService 01_server = getTaskService("\\\\123.123.222.222", "administrator", "domain1", "pwd0", false);
TaskService 02_server = getTaskService("\\\\123.122.222.222", "administrator", "domain2", "pwd1", false);

and bind task to grodview

for server 01_serve
DataTable dataTable = new DataTable();
dataTable.Columns.Add("TaskName");
dataTable.Columns.Add("TaskSchedule");
dataTable.Columns.Add("TaskNextRun");
dataTable.Columns.Add("TaskLastRun");
dataTable.Columns.Add("State");
dataTable.AcceptChanges();

DataRow dataRow;
StringBuilder sbTaskSchedule = new StringBuilder();

Version ver = 01_server .HighestSupportedVersion;
bool newVer = (ver >= new Version(1, 2));

TaskFolder tf = 01_serve.RootFolder;


int ctaskNx =01_serve.RootFolder.Tasks.Count;

for (int i = 0; i < ctaskNx; i++)
{

m_Task = 01_serve.RootFolder.Tasks[i];

string strFileNamePath = m_Task.Definition.Actions.ToString().Trim();

if (strFileNamePath.Contains(".vbs"))
{
dataRow = dataTable.NewRow();
dataRow["TaskName"] = m_Task.Name.ToString().Trim();
dataRow["TaskNextRun"] = m_Task.NextRunTime.ToString().Trim();
dataRow["TaskLastRun"] = m_Task.LastRunTime.ToString().Trim();
dataRow["State"] = m_Task.State.ToString().Trim();
dataTable.Rows.Add(dataRow);
dataTable.AcceptChanges();
}
}

for server 02_serve

Version ver = 02_server .HighestSupportedVersion;
bool newVer = (ver >= new Version(1, 2));

TaskFolder tf = 02_server.RootFolder;


int ctaskNx = 02_server.RootFolder.Tasks.Count;

for (int i = 0; i < ctaskNx; i++)
{

m_Task = 02_server.RootFolder.Tasks[i];

string strFileNamePath = m_Task.Definition.Actions.ToString().Trim();

if (strFileNamePath.Contains(".vbs"))
{
dataRow = dataTable.NewRow();
dataRow["TaskName"] = m_Task.Name.ToString().Trim();
dataRow["TaskNextRun"] = m_Task.NextRunTime.ToString().Trim();
dataRow["TaskLastRun"] = m_Task.LastRunTime.ToString().Trim();
dataRow["State"] = m_Task.State.ToString().Trim();
dataTable.Rows.Add(dataRow);
dataTable.AcceptChanges();
}
}

but i am not able to get task from remote server
please guide me where i am wrong

thanks
vinod

Created Issue: If user Cancels the Password Dialog box Exception bubbles to calling application [10376]

$
0
0
I'm setting up a Scheduled Task where I was the user to supply their own credentials and I want the task to be
TaskLogonType.Password

But if the user cancels that dialog box after pressing ok on the Main TaskEditDialog, then a Null password exception bubbles out to the calling application.

I downloaded the source to investigate and saw a couple of small tweaks to be made, but I'm not sure about how to make them available.

In TaskEditDialog.CS

private DialogResults InvokeCredentialDialog(string userName)
{

CredentialsDialog dlg = new CredentialsDialog(EditorProperties.Resources.TaskSchedulerName,
EditorProperties.Resources.CredentialPromptMessage, userName);
dlg.Options |= CredentialsDialogOptions.Persist;
dlg.ValidatePassword = true;
DialogResults dr = new DialogResults();

dr.Result = dlg.ShowDialog(this.ParentForm);

if (dr.Result == DialogResult.OK)
{
dr.Password = dlg.Password;
}
else
{
dr.Password = null;
}
return dr;
}

private void okBtn_Click(object sender, System.EventArgs e)
{
if (this.TaskDefinition.Actions.Count == 0)
{
MessageBox.Show(EditorProperties.Resources.TaskMustHaveActionsError, null, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}

if (this.TaskDefinition.Settings.DeleteExpiredTaskAfter != TimeSpan.Zero && !ValidateOneTriggerExpires())
{
MessageBox.Show(EditorProperties.Resources.Error_TaskDeleteMustHaveExpiringTrigger, null, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}

bool okToSave = true;

if (RegisterTaskOnAccept)
{
if (this.Task != null)
this.Task.RegisterChanges();
else
{
string user = this.TaskDefinition.Principal.ToString();
string pwd = null;
TaskFolder fld = this.TaskService.GetFolder(this.TaskFolder);
if (this.TaskDefinition.Principal.LogonType == TaskLogonType.InteractiveTokenOrPassword || this.TaskDefinition.Principal.LogonType == TaskLogonType.Password)
{
if (InvokeCredentialDialog(user).Result == System.Windows.Forms.DialogResult.OK)
{
fld.RegisterTaskDefinition(this.taskPropertiesControl1.TaskName, this.TaskDefinition, TaskCreation.CreateOrUpdate,
user, pwd, this.TaskDefinition.Principal.LogonType);
}
else
{
okToSave = false;
}
}
}
}
if (okToSave)
{
this.DialogResult = DialogResult.OK;
Close();
}
}

and added this class

private class DialogResults
{
public DialogResult Result { get; set; }
public String Password { get; set; }
}

New Post: Configure for:

$
0
0

Hi David,

I have a couple of questions for you:

(1) I noticed that if I choose "Configure for: Windows Server 2003, Windows XP, or Windows 2000", save the task schedule, and reopen or edit it, the "Configure for:" value doesn't stick to this chosen OS when the task schedule was saved. Is this by design? ...meaning it defaults to whatever is your current OS.

(2) Can we add Windows 8 to the list...together with Windows 7, Vista, and Windows Server 2008 in the Configure for: <OS> choices?

Thanks, Audi

 

 

New Post: Configure for:

$
0
0

On your first item, you found a bug. I have corrected the problem in the code and will release it with the next update (likely 1.8.4).

On your second point, I haven't done this yet as Windows 8 has not released and I don't know yet if they will be enhancing the base COM library or what the final UI will look like on the RTM Windows 8 Task Scheduler MMC. Once I know both those things, I will update the library.

New Post: Displayed Tasks not showing correct Status nor NextRunTime

$
0
0

Found the problem... I had assigned permissions to C:\Tasks, but on this machine the Tasks are stored at C:\Windows\System32\Tasks -- once I assigned the folder the correct permissions, then it worked.  Sorry for the wild goose chase.

Closed Issue: CredentialsDialog.cs this.UserName null [10118]

$
0
0
Not sure if bug or me doing something funny.

On if (this.ValidatePassword && !IsValidPassword(this.UserName.ToString(), password.ToString())) the UserName is null although it was entered. Whould it not be userName.ToString() passed into the function ?
Comments:

Fixed

Closed Issue: Uncaught exception [9826]

$
0
0
'Elucidate.vshost.exe' (Managed (v4.0.30319)): Loaded 'Z:\Elucidate\Elucidate-Phase_I\Elucidate\bin\Debug\TimeSpan2.dll'
A first chance exception of type 'System.NullReferenceException' occurred in Microsoft.Win32.TaskScheduler.dll

Running on Win 7 x64, when using the editor to go through the pages that have been generated.

This is caused when clicking on the "Run Times" tab shown by the TaskEditDialog.ShowDialog()
Comments:

Fixed. Cause is mixing old .NET with new (>3.5) .NET assemblies.

Viewing all 2206 articles
Browse latest View live