У меня есть все задачи с сервера в XML-файле, полученном с помощью
schtasks /Query /XML ONE>C:\schedtasksBackup.xml
Теперь я хочу импортировать все задачи на другой сервер. Вся информация объясняет, как импортировать или создавать ОДНУ задачу за раз, но не несколько задач одновременно.
Это возможно? Или мне нужно разделить файл на несколько файлов атомарных задач?
Я написал этот код, чтобы разделить xml и импортировать задачи одну за другой:
var taskXML = new XmlDocument();
taskXML.Load(@"d:\temp\schedtasksBackup.xml");
var batbody = new StringBuilder();
XmlNodeList tasks = taskXML.DocumentElement.GetElementsByTagName("Task");
string strFileName = "d:\\temp\\Task";
for (int i = 0; i < tasks.Count; i++) {
string onetaskXML = tasks[i].OuterXml;
//Create the New File. With a little more extra effort
//you can get the name from a comment above the task
XmlWriter xw = XmlWriter.Create(strFileName + "_" + (i+1) + ".xml");
batbody.AppendLine(string.Format("schtasks.exe /create /TN \"{0}\" /XML \"{1}\"", "Task " + (i+1) + " Name", strFileName + "_" + (i+1) + ".xml"));
//Write the XML
xw.WriteRaw(onetaskXML.ToString());
xw.Close();
// Write a bat to import all the tasks
var batfile = new System.IO.StreamWriter("d:\\temp\\importAllTasks.bat");
batfile.WriteLine(batbody.ToString());
batfile.Close();
}
Редактировать: НО, это было не так просто. Я не мог понять почему, но schtasks.exe
дает malformed XML error
импорт файла. Мне нужно импортировать файлы вручную (ненавижу, но у меня не было больше времени на решение проблемы)
Я считаю, что если вы хотите использовать schtasks, вам нужно сделать их атомарными. Я бы порекомендовал вам использовать командлет new-task в powershell, если вы хотите запланировать несколько задач (или просто хотите более детализированные параметры), см. PowerShellPack если у вас еще не установлен комплект ресурсов.