重定向C#进程输出

时间:2011-05-24 19:45:50

标签: c# sql stored-procedures schtasks.exe

我正在开发一个项目,用于查询在其他系统上运行的计划任务。我编写了一个运行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();

下面是使用文本编写器重定向到文本文件。

4 个答案:

答案 0 :(得分:1)

我会写一个这个小程序调用的web服务来发布它的信息。让该Web服务将结果写入数据库并公开该服务的方法以检索信息。使用大多数程序员熟悉的一组技术使其更易于维护。 唯一的问题是,您的控制台应用程序将如何执行? 是否值得将控制台应用程序转换为Windows服务?让它听取传入的请求来做它的东西。 WCF非常便于处理这些类型的任务。 你觉得怎么样?

WCF Landing Page

How to: Host a WCF Service in a Managed Windows Service

您需要与网络人员交谈,以确保您的网络服务器可以打开与安装了wcf服务的目标计算机的连接。

答案 1 :(得分:1)

是的,可以通过利用forsqlcmd 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 appender配置log4net以捕获您编写的日志消息。
  • 如果您愿意,还可以配置滚动文件appender,以便日志消息也写入日志文件。
  • 你可以想象并添加一个事件日志追加器,以便将标准错误写入事件日志,这样操作人员就可以发出警报。

我喜欢这种方式使用log4net,因为它使生产批处理的东西变得简单。我可以获得正常的控制台输出,同时我在文本文件,SQL数据库或Windows事件日志中捕获它。使操作人员感到高兴(ier)。