我正在开发一个项目,用于查询在其他系统上运行的计划任务。我编写了一个运行schtasks的控制台应用程序,并将输出重定向到文本文件。但是,我想知道是否可以将此输出重定向到SQL数据库?
我正在考虑编写一个存储过程来处理所有插件,但我不知道如何处理控制台应用程序中的数据。我已经有了一个存储过程,它将XML和文本数据重定向到我过去创建的数据库,但我试图不在每个地方放置文件。
任何输入都会很棒。这是我的代码,以防有人想看到它:
Process process = new Process();
process.StartInfo.FileName = "C:\\Windows\\System32\\schtasks.exe";
process.StartInfo.Arguments = "/query /s 192.168.0.124";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
string procOutput = process.StandardOutput.ReadToEnd();
下面是使用文本编写器重定向到文本文件。
答案 0 :(得分:1)
我会写一个这个小程序调用的web服务来发布它的信息。让该Web服务将结果写入数据库并公开该服务的方法以检索信息。使用大多数程序员熟悉的一组技术使其更易于维护。 唯一的问题是,您的控制台应用程序将如何执行? 是否值得将控制台应用程序转换为Windows服务?让它听取传入的请求来做它的东西。 WCF非常便于处理这些类型的任务。 你觉得怎么样?
How to: Host a WCF Service in a Managed Windows Service
您需要与网络人员交谈,以确保您的网络服务器可以打开与安装了wcf服务的目标计算机的连接。
答案 1 :(得分:1)
是的,可以通过利用for
和sqlcmd variables来一行:
for /F "skip=1 delims=, tokens=1,2,3*" %i in ('schtasks.exe /query /FO CSV /s <server>') do sqlcmd -E -S <dbserver> -d <db> -Q "insert into <table> (TaskName, NextRun, Status) values ('$(TaskName)', '$(NextRun)', '$(Status)');" /v TaskName=%i /v NextRun=%j /v Status=%k
答案 2 :(得分:0)
如果程序很小,将在受信任的机器上运行,只需使用SqlConnection(或等效于rdmbs的连接)来创建命令,并执行它,将procOutput作为参数传递)。像这样:
var connection = new System.Data.SqlClient.SqlConnection(connection);
var command = connection.CreateCommand();
command.CommandText = "procedureName";
command.Parameters.Add(new System.Data.SqlClient.SqlParameter("paramName", "output"));
command.CommandType = System.Data.CommandType.StoredProcedure;
command.ExecuteNonQuery();
答案 3 :(得分:0)
不确定。懒惰的方法是:
我喜欢这种方式使用log4net,因为它使生产批处理的东西变得简单。我可以获得正常的控制台输出,同时我在文本文件,SQL数据库或Windows事件日志中捕获它。使操作人员感到高兴(ier)。