XP_CMDSHELL如何捕获返回值?

时间:2013-06-20 01:59:15

标签: c# xp-cmdshell

我需要编写一个控制台应用程序,它返回一个可以通过xp_cmdshell捕获的返回代码。

我从c#代码开始,如下所示,

class Program
    {
        static int Main(string[] args)
        {
            //make sure the correct number of arguments are being passed.
            if (args.Length !=5)
            {
                Console.WriteLine("not thr right number of args. \nUsage SFTPUploadFile <host> <port> <username> <password> <localFilePath>");
                return 1;
            }

            return 0;        
        }

    }

XP_cmdhsell我正在使用我发现的一些代码

declare  @rc int

create table #output (id int identity(1,1), output nvarchar(255) null)
insert #output (output) exec @rc = master..xp_cmdshell 'd:\FILENAME PARA1 PARA2 PARA3 PARA4 PARA5'
select * from #output where output is not null order by id
drop table #output

但是当我运行我的xp_cmdshell时,我只是得到null。我不应该得到1或0吗?

由于

1 个答案:

答案 0 :(得分:0)

看起来您的程序会检查是否有5个参数,如果有则不执行任何操作(返回0)。

反过来,xp_cmdshell命令提供所有参数。如果xp_cmdshell没有收到任何输出,它将返回NULL

如果您将代码更改为以下内容:

class Program
    {
        static int Main(string[] args)
        {
            //make sure the correct number of arguments are being passed.
            if (args.Length !=5)
            {
                Console.WriteLine("not thr right number of args. \nUsage SFTPUploadFile <host> <port> <username> <password> <localFilePath>");
                return 1;
            }

            Console.WriteLine("You had the right number of args.");
            return 0;        
        }

    }

(或者,如果你真的想要0或1,你可以Console.WriteLine("0");Console.WriteLine("1");。)

你会回来You had the right number of args.。这是因为return 0;return 1;不会向控制台打印任何内容,这是xp_cmdshell将发送回客户端的内容。

你可以通过EXEC master..xp_cmdshell 'cd ..'来证明这一点......这是一个不会返回结果的命令。另一方面,EXEC master..xp_cmdshell 'dir *.exe'将返回目录内容,因为这是输出(或写入)控制台的内容。