2013-06-20 1 views
0

Je dois écrire une application de console qui renvoie un code de retour qui peut être capturé via xp_cmdshell.XP_CMDSHELL comment capturer la valeur de retour?

J'ai commencé avec le code C# comme suit,

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;   
     } 

    } 

Le XP_cmdhsell J'utilise un code que j'ai trouvé

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 

mais quand je lance mon xp_cmdshell, je viens d'obtenir nulle. Ne devrais-je pas avoir 1 ou 0?

Merci

+0

Vous devriez probablement ajouter votre appel à 'xp_cmdshell' et comment vous vérifiez sa valeur. –

Répondre

0

Il semble que votre programme vérifie s'il y a ou non des 5 paramètres, et ne fait rien (retourne 0) s'il y a.

La commande xp_cmdshell fournit à son tour tous les paramètres. xp_cmdshell renverra NULL s'il ne reçoit aucune sortie.

Si vous avez modifié le code pour lire quelque chose comme ceci:

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;   
     } 

    } 

(Vous pouvez faire Console.WriteLine("0"); et Console.WriteLine("1"); si vous voulez vraiment 0 ou 1 dos.)

Vous regagnerons You had the right number of args.. En effet, return 0; et return 1; n'impriment rien sur la console, ce que xp_cmdshell va renvoyer au client.

Vous pouvez le prouver en faisant EXEC master..xp_cmdshell 'cd ..' ... c'est une commande qui ne retourne pas les résultats. D'autre part, EXEC master..xp_cmdshell 'dir *.exe' vous renverra le contenu du répertoire, car c'est ce qui serait produit (ou écrit) sur la console.

+0

sur mon local il sort effectivement les messages de succès ou d'erreur. Mais sur le serveur de production, il retourne juste null ou les deux cas ... pourrait-il y avoir un problème d'autorisation? – user2206329

+0

Vous avez raison - xp_cmdshell s'exécute sous votre nom d'utilisateur/mot de passe lors de la tentative d'exécution (et vous êtes un administrateur système), sinon, il utilisera l'utilisateur proxy. Vous (ou l'utilisateur du proxy) pouvez ou ne pas avoir les autorisations sur le serveur en production pour voir un résultat. Plus peut être trouvé [ici] (http://msdn.microsoft.com/en-us/library/ms175046.aspx) – brazilianldsjaguar

Questions connexes