我将使用以下方法获取的 XML 文件中来自服务器的所有任务
schtasks /Query /XML ONE>C:\schedtasksBackup.xml
现在,我想导入另一台服务器中的所有任务。所有信息都解释了如何导入或一次创建一个任务,但不能同时导入多个任务。
可能吗?还是我需要将文件拆分为多个原子任务文件?
答案1
我认为,如果您想使用 schtasks,则需要使它们具有原子性。如果您想要安排多个任务(或者只是想要更精细的选项),我建议您在 powershell 中使用 new-task cmdlet,请参阅PowerShell包如果您尚未安装资源工具包。
答案2
我编写了此代码来拆分 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
导入文件的方法。我必须手动导入文件(讨厌它,但没有更多时间花在这个问题上)