C# 中的 SCHTASKS 无效语法但在 CMD 中工作

SCHTASKS Invalid Syntax in C# but working in CMD

我有一个命令,我正在尝试 运行 通过 C# 从一堆计算机中获取 CSV 格式的任务列表。

为此,我使用 SCHTASKS 命令将命令重定向到 CSV。所以我用 C# 编写了这段代码来为我做这件事:

        string commandGetStatus = "schtasks";
        string argumentsGetStatus = "/s:" + CompName +
                " /fo:csv" +
                " > \"" + @"\BIG\OL\UNC\PATH\"+CompName+".csv" + "\"";

        getLatestTaskStatus.StartInfo.FileName = commandGetStatus;
        getLatestTaskStatus.StartInfo.Arguments = argumentsGetStatus;
        getLatestTaskStatus.StartInfo.CreateNoWindow = true;
        getLatestTaskStatus.StartInfo.RedirectStandardOutput = true;
        getLatestTaskStatus.StartInfo.RedirectStandardInput = true;
        getLatestTaskStatus.StartInfo.RedirectStandardError = true;
        getLatestTaskStatus.StartInfo.UseShellExecute = false;
        getLatestTaskStatus.Start();

它returns输出:

        ERROR: Invalid syntax.

        Type "SCHTASKS /?" for usage.

所以我使用 StartInfo.FileName + " " + StartInfo.Arguments 来打印出应该执行的确切命令。从那里,我将命令复制并粘贴到 CMD 中。它在哪里工作没有问题。这是命令 + 参数:

        schtasks /s:COMPUTERNAME /fo:csv > "\BIG\OL\UNC\PATH\COMPUTERNAME.csv"

目前我不确定问题出在哪里。


我的解决方案

Luaan 对这个问题的看法完全正确。命令提示符重定向运算符 > 在不使用命令提示符的情况下不可用。幸运的是,解决方案简单易行。我将参数变量减少为:

"/s:" + CompName + " /fo:csv"

在重定向标准输出的情况下,我简单地使用了:

            string output = process.StandardOuptut.ReadToEnd();
            File.WriteAllText(@"\UNC\File\Path\" + myfile + ".csv", output);

您明确禁用了 UseShellExecute - > 是一个 shell 运算符,而不是进程固有的东西。这绝对不是 争论 。您需要读取输出并手动将其写出:)