网页上显示windows系统任务计划

服务器多,系统多,功能模块多。有不少程序需要做交叉部署,重叠部署。出了问题找起来费劲得很。。

需求:不用db,要用json格式的文本来配置需要的信息,方便修改。然后在网页上按要求显示相关信息。

设计的json格式:

 1 {
 2   "cfg": [
 3     {
 4       "func": "PhoneRecord",
 5       "server": [
 6         {
 7           "name": "某本地服务器",
 8           "ip": "1.1.1.1",
 9           "domain": "aaa",
10           "user": "aaa",
11           "password": "aaa",
12           "program": [
13             {
14               "name": "PhoneRecord_Upload",
15               "note": "<a target='_blank' href='http://code.shnyu.edu.cn/sq6/publicsafety.bms_alarm/-/wikis/4.2-PhoneRecord_Upload'>帮助文档<a>"
16             }
17           ]
18         },
19         {
20           "name": "某内网服务器",
21           "ip": "2.2.2.2",
22           "domain": "bbb",
23           "user": "bbb",
24           "password": "bbb",
25           "program": [
26             {
27               "name": "PhoneRecord_Upload",
28               "note": "<a target='_blank' href='http://code.shnyu.edu.cn/sq6/publicsafety.bms_alarm/-/wikis/4.2-PhoneRecord_Upload'>帮助文档<a>"
29             },
30             {
31               "name": "PhoneRecord_TEXT",
32               "note": "<a target='_blank' href='http://code.shnyu.edu.cn/sq6/publicsafety.bms_alarm/-/wikis/4.4-PhoneRecord_TEXT'>帮助文档<a>"
33             }
34           ]
35         }
36       ]
37     },
38     {
39       "func": "NYUCard",
40       "server": [
41         {
42           "name": "某内网服务器",
43           "ip": "2.2.2.2",
44           "domain": "bbb",
45           "user": "bbb",
46           "password": "bbb",
47           "program": [
48             {
49               "name": "NYUCard",
50               "note": "<a target='_blank' href='http://code.shnyu.edu.cn/sq6/publicsafety.bms_alarm/-/wikis/3-NYUCard'>帮助文档<a>"
51             }
52           ]
53         }
54       ]
55     }
56   ]
57 }
View Code

网页:

主要是这个合并单元格的较为烦人,

参考了篇博客的思路 https://www.cnblogs.com/wangzhenyu666/p/8302881.html 

但是这里会涉及到多层嵌套故不能照搬,

实现和优化过程:

  1 using System.Text;
  2 using System.IO;
  3 using Newtonsoft.Json.Linq;
  4 using System.Web;
  5 using TaskScheduler;
  6 
  7 namespace OAConsole_IIS
  8 {
  9     public class cfg
 10     {
 11 
 12         public static string HtmlTable()
 13         {
 14             var cfgPath = $"{HttpContext.Current.Server.MapPath("~/cfg.json")}";
 15             var str = File.ReadAllText(cfgPath);
 16             var obj = JObject.Parse(str);
 17 
 18             StringBuilder sb = new StringBuilder();
 19             sb.Append("<table>");
 20             //sb.Append("<thead><tr><th>功能</th><th>服务器IP</th><th>程序名称</th><th>运行状态</th><th>最近运行时间</th><th>下次运行时间</th></tr></thead>");
 21 
 22             foreach (var func in obj["cfg"])
 23             {
 24                 sb.Append("<tr>");
 25                 sb.Append($"<td>{func["func"]}</td>");
 26                 //
 27                 sb.Append($"<td>");
 28                 sb.Append("<table>");
 29                 foreach (var server in func["server"])
 30                 {
 31                     var tasks = SchTaskExt.GetAllTasks();
 32                     sb.Append("<tr>");
 33                     sb.Append($"<td>{server["name"]}-{server["ip"]}</td>");
 34                     //
 35                     sb.Append($"<td>");
 36                     sb.Append("<table>");
 37                     foreach (var program in server["program"])
 38                     {
 39                         var State = "";
 40                         var LastRunTime = "";
 41                         var NextRunTime = "";
 42 
 43                         IRegisteredTask task = null;
 44                         try
 45                         {
 46                             task = tasks[program["name"]];
 47                             State = task.State.ToString();
 48                             LastRunTime = task.LastRunTime.ToString();
 49                             NextRunTime = task.NextRunTime.ToString();
 50                         }
 51                         catch (System.Exception)
 52                         {
 53                         }
 54 
 55                         sb.Append("<tr>");
 56                         sb.Append($"<td>{program["name"]}</td>");
 57                         sb.Append($"<td>{State}</td>");
 58                         sb.Append($"<td>{LastRunTime}</td>");
 59                         sb.Append($"<td>{NextRunTime}</td>");
 60                         sb.Append($"<td>{program["note"]}</td>");
 61                         sb.Append("</tr>");
 62                     }
 63                     sb.Append("</table>");
 64                     sb.Append($"</td>");
 65                     //
 66                     sb.Append("</tr>");
 67                 }
 68                 sb.Append("</table>");
 69                 sb.Append($"</td>");
 70                 //
 71                 sb.Append("</tr>");
 72             }
 73 
 74             sb.Append("</table>");
 75             return sb.ToString();
 76 
 77         }
 78 
 79         public static string HtmlTable2()
 80         {
 81             var cfgPath = $"{HttpContext.Current.Server.MapPath("~/cfg.json")}";
 82             var str = File.ReadAllText(cfgPath);
 83             var obj = JObject.Parse(str);
 84 
 85             StringBuilder sb = new StringBuilder();
 86             sb.Append("<table>");
 87             sb.Append("<thead><tr><th>功能</th><th>服务器IP</th><th>程序名称</th><th>运行状态</th><th>最近运行时间</th><th>下次运行时间</th><th>note</th></tr></thead>");
 88 
 89             for (int i = 0; i < ((JContainer)obj["cfg"]).Count; i++)
 90             {
 91                 for (int j = 0; j < ((JContainer)obj["cfg"][i]["server"]).Count; j++)
 92                 {
 93                     for (int k = 0; k < ((JContainer)obj["cfg"][i]["server"][j]["program"]).Count; k++)
 94                     {
 95                         var func = obj["cfg"][i]["func"].ToString();
 96                         var server_name = obj["cfg"][i]["server"][j]["name"].ToString();
 97                         var server_ip = obj["cfg"][i]["server"][j]["ip"].ToString();
 98                         var program_name = obj["cfg"][i]["server"][j]["program"][k]["name"].ToString();
 99                         var program_note = obj["cfg"][i]["server"][j]["program"][k]["note"].ToString();
100                         sb.Append($"<tr><td>{func}</td><td>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
101                     }
102                 }
103             }
104 
105             sb.Append("</table>");
106             return sb.ToString();
107 
108         }
109 
110         public static string HtmlTable3()
111         {
112             var cfgPath = $"{HttpContext.Current.Server.MapPath("~/cfg.json")}";
113             var str = File.ReadAllText(cfgPath);
114             var obj = JObject.Parse(str);
115 
116             StringBuilder sb = new StringBuilder();
117             sb.Append("<table>");
118             sb.Append("<thead><tr><th>功能</th><th>服务器IP</th><th>程序名称</th><th>运行状态</th><th>最近运行时间</th><th>下次运行时间</th><th>note</th></tr></thead>");
119 
120             for (int i = 0; i < ((JContainer)obj["cfg"]).Count; i++)
121             {
122                 for (int j = 0; j < ((JContainer)obj["cfg"][i]["server"]).Count; j++)
123                 {
124                     for (int k = 0; k < ((JContainer)obj["cfg"][i]["server"][j]["program"]).Count; k++)
125                     {
126                         var func = obj["cfg"][i]["func"].ToString();
127                         var server_name = obj["cfg"][i]["server"][j]["name"].ToString();
128                         var server_ip = obj["cfg"][i]["server"][j]["ip"].ToString();
129                         var program_name = obj["cfg"][i]["server"][j]["program"][k]["name"].ToString();
130                         var program_note = obj["cfg"][i]["server"][j]["program"][k]["note"].ToString();
131                         //sb.Append($"<tr><td>{func}</td><td>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
132 
133                         if (k == 0)
134                         {
135                             sb.Append($"<tr><td>{func}</td><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
136                         }
137                         else
138                         {
139                             sb.Append($"<tr><td>{func}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
140                         }
141 
142                     }
143                 }
144             }
145 
146             sb.Append("</table>");
147             return sb.ToString();
148 
149         }
150 
151         public static string HtmlTable4()
152         {
153             var cfgPath = $"{HttpContext.Current.Server.MapPath("~/cfg.json")}";
154             var str = File.ReadAllText(cfgPath);
155             var obj = JObject.Parse(str);
156 
157             StringBuilder sb = new StringBuilder();
158             sb.Append("<table>");
159             sb.Append("<thead><tr><th>功能</th><th>服务器IP</th><th>程序名称</th><th>运行状态</th><th>最近运行时间</th><th>下次运行时间</th><th>note</th></tr></thead>");
160 
161             for (int i = 0; i < ((JContainer)obj["cfg"]).Count; i++)
162             {
163                 for (int j = 0; j < ((JContainer)obj["cfg"][i]["server"]).Count; j++)
164                 {
165                     for (int k = 0; k < ((JContainer)obj["cfg"][i]["server"][j]["program"]).Count; k++)
166                     {
167                         var func = obj["cfg"][i]["func"].ToString();
168                         var server_name = obj["cfg"][i]["server"][j]["name"].ToString();
169                         var server_ip = obj["cfg"][i]["server"][j]["ip"].ToString();
170                         var program_name = obj["cfg"][i]["server"][j]["program"][k]["name"].ToString();
171                         var program_note = obj["cfg"][i]["server"][j]["program"][k]["note"].ToString();
172                         //sb.Append($"<tr><td>{func}</td><td>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
173 
174                         if (k == 0)
175                         {
176                             //sb.Append($"<tr><td>{func}</td><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
177                             if (j == 0)
178                             {
179                                 var func_rowspan = 0;
180                                 for (int x = 0; x < ((JContainer)obj["cfg"][i]["server"]).Count; x++)
181                                 {
182                                     func_rowspan += ((JContainer)obj["cfg"][i]["server"][x]["program"]).Count;
183                                 }
184                                 sb.Append($"<tr><td rowspan='{func_rowspan}'>{func}</td><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
185                             }
186                             else
187                             {
188                                 sb.Append($"<tr><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
189                             }
190                         }
191                         else
192                         {
193                             //sb.Append($"<tr><td>{func}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
194                             if (j == 0)
195                             {
196                                 var func_rowspan = 0;
197                                 for (int x = 0; x < ((JContainer)obj["cfg"][i]["server"]).Count; x++)
198                                 {
199                                     func_rowspan += ((JContainer)obj["cfg"][i]["server"][x]["program"]).Count;
200                                 }
201                                 sb.Append($"<tr><td rowspan='{func_rowspan}'>{func}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
202                             }
203                             else
204                             {
205                                 sb.Append($"<tr><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
206                             }
207                         }
208 
209                     }
210                 }
211             }
212 
213             sb.Append("</table>");
214             return sb.ToString();
215 
216         }
217 
218         //算法优化
219         public static string HtmlTable5()
220         {
221             var cfgPath = $"{HttpContext.Current.Server.MapPath("~/cfg.json")}";
222             var str = File.ReadAllText(cfgPath);
223             var obj = JObject.Parse(str);
224 
225             StringBuilder sb = new StringBuilder();
226             sb.Append("<table>");
227             sb.Append("<thead><tr><th>功能</th><th>服务器IP</th><th>程序名称</th><th>运行状态</th><th>最近运行时间</th><th>下次运行时间</th><th>note</th></tr></thead>");
228 
229             for (int i = 0; i < ((JContainer)obj["cfg"]).Count; i++)
230             {
231                 var func_rowspan = 0;
232                 for (int x = 0; x < ((JContainer)obj["cfg"][i]["server"]).Count; x++)
233                 {
234                     func_rowspan += ((JContainer)obj["cfg"][i]["server"][x]["program"]).Count;
235                 }
236 
237                 for (int j = 0; j < ((JContainer)obj["cfg"][i]["server"]).Count; j++)
238                 {
239                     for (int k = 0; k < ((JContainer)obj["cfg"][i]["server"][j]["program"]).Count; k++)
240                     {
241                         var func = obj["cfg"][i]["func"].ToString();
242                         var server_name = obj["cfg"][i]["server"][j]["name"].ToString();
243                         var server_ip = obj["cfg"][i]["server"][j]["ip"].ToString();
244                         var program_name = obj["cfg"][i]["server"][j]["program"][k]["name"].ToString();
245                         var program_note = obj["cfg"][i]["server"][j]["program"][k]["note"].ToString();
246                         
247                         if (k == 0)
248                         {
249                             if (j == 0)
250                             {
251                                 sb.Append($"<tr><td rowspan='{func_rowspan}'>{func}</td><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
252                             }
253                             else
254                             {
255                                 sb.Append($"<tr><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
256                             }
257                         }
258                         else
259                         {
260                             if (j == 0)
261                             {
262                                 sb.Append($"<tr><td rowspan='{func_rowspan}'>{func}</td><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
263                             }
264                             else
265                             {
266                                 sb.Append($"<tr><td>{program_name}</td><td>running</td><td>12:00</td><td>15:00</td><td>{program_note}</td></tr>");
267                             }
268                         }
269 
270                     }
271                 }
272             }
273 
274             sb.Append("</table>");
275             return sb.ToString();
276 
277         }
278 
279         public static string HtmlTable6()
280         {
281             var cfgPath = $"{HttpContext.Current.Server.MapPath("~/cfg.json")}";
282             var str = File.ReadAllText(cfgPath);
283             var obj = JObject.Parse(str);
284 
285             StringBuilder sb = new StringBuilder();
286             sb.Append("<table>");
287             sb.Append("<thead><tr><th>功能</th><th>服务器IP</th><th>程序名称</th><th>运行状态</th><th>最近运行时间</th><th>下次运行时间</th><th>note</th></tr></thead>");
288 
289             for (int i = 0; i < ((JContainer)obj["cfg"]).Count; i++)
290             {
291                 var func_rowspan = 0;
292                 for (int x = 0; x < ((JContainer)obj["cfg"][i]["server"]).Count; x++)
293                 {
294                     func_rowspan += ((JContainer)obj["cfg"][i]["server"][x]["program"]).Count;
295                 }
296 
297                 for (int j = 0; j < ((JContainer)obj["cfg"][i]["server"]).Count; j++)
298                 {
299                     //TODO
300                     //GetAllTasks(object serverName, object user, object domain, object password)
301 
302                     var tasks = SchTaskExt.GetAllTasks();
303 
304                     for (int k = 0; k < ((JContainer)obj["cfg"][i]["server"][j]["program"]).Count; k++)
305                     {
306                         var func = obj["cfg"][i]["func"].ToString();
307                         var server_name = obj["cfg"][i]["server"][j]["name"].ToString();
308                         var server_ip = obj["cfg"][i]["server"][j]["ip"].ToString();
309                         var program_name = obj["cfg"][i]["server"][j]["program"][k]["name"].ToString();
310                         var program_note = obj["cfg"][i]["server"][j]["program"][k]["note"].ToString();
311 
312                         var State = "";
313                         var LastRunTime = "";
314                         var NextRunTime = "";
315 
316                         IRegisteredTask task = null;
317                         try
318                         {
319                             task = tasks[program_name];
320                             State = task.State.ToString();
321                             LastRunTime = task.LastRunTime.ToString();
322                             NextRunTime = task.NextRunTime.ToString();
323                         }
324                         catch (System.Exception)
325                         {
326                         }
327 
328                         if (k == 0)
329                         {
330                             if (j == 0)
331                             {
332                                 sb.Append($"<tr><td rowspan='{func_rowspan}'>{func}</td><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>{State}</td><td>{LastRunTime}</td><td>{NextRunTime}</td><td>{program_note}</td></tr>");
333                             }
334                             else
335                             {
336                                 sb.Append($"<tr><td rowspan='{((JContainer)obj["cfg"][i]["server"][j]["program"]).Count}'>{server_name}-{server_ip}</td><td>{program_name}</td><td>{State}</td><td>{LastRunTime}</td><td>{NextRunTime}</td><td>{program_note}</td></tr>");
337                             }
338                         }
339                         else
340                         {
341                             //if (j == 0)
342                             //{
343                             //    sb.Append($"<tr><td rowspan='{func_rowspan}'>{func}</td><td>{program_name}</td><td>{State}</td><td>{LastRunTime}</td><td>{NextRunTime}</td><td>{program_note}</td></tr>");
344                             //}
345                             //else
346                             //{
347                             //    sb.Append($"<tr><td>{program_name}</td><td>{State}</td><td>{LastRunTime}</td><td>{NextRunTime}</td><td>{program_note}</td></tr>");
348                             //}
349                             sb.Append($"<tr><td>{program_name}</td><td>{State}</td><td>{LastRunTime}</td><td>{NextRunTime}</td><td>{program_note}</td></tr>");
350                         }
351 
352                     }
353                 }
354             }
355 
356             sb.Append("</table>");
357             return sb.ToString();
358 
359         }
360 
361 
362 
363     }
364 }
View Code

还有连接远程服务器的问题:

https://www.cnblogs.com/tonge/p/4410066.html

远程服务器可以的,可以不加域。本地账号也认的(域留空就行)。

还有就是可以用windows自带的token方式connect :https://docs.microsoft.com/zh-cn/windows/win32/api/taskschd/nf-taskschd-itaskservice-connect

原文地址:https://www.cnblogs.com/mmclog/p/14667975.html