récupération statut lecteur 3590 sur Lunix depuis windows
Bonjour,
J'ai des lecteurs de bandes magnétiques IBM 3590 et 3592.
Je veux pouvoir, depuis une application, récupérer leurs statuts.
De base, vu que les lecteurs sont reliés à un serveur linux, pour récupérer leurs status je tape cette commande :
mt -f /dev/[nom du lecteur] status
Depuis windows, j'utilise l'utilitaire plink pour exécuter cette même commande.
\\[chemin jusqu'à plink]\plink.exe -ssh [user]@[ipadress du serveur linux] -pw [mdp] "mt -f /dev/[nom du lecteur] status"
Qui me retourne plusieurs choses possible :
http://imageshack.com/a/img36/6760/kqvd.png
lecteur occupé.
http://imageshack.com/a/img30/4930/kxv5.png
cartouche présente dans le lecteur
http://imageshack.com/a/img96/1066/8681.png
lecteur en erreur
http://imageshack.com/a/img713/2159/5hy1.png
lecteur libre
Donc pas de problème : je n'ai qu'à exécuter ma commande depuis une application en C# et récupérer le résultat pour faire une supervision centralisé des lecteurs ! :ccool:
Du coup je m'y mets :
Une classe pour envoyer une commande DOS et récupérer son résultat :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
public static string Execute(string file, string arguments)
{
ProcessStartInfo startInfo = new ProcessStartInfo("cmd.exe");
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
startInfo.FileName = file;
startInfo.Arguments = arguments;
Process process = new Process();
process.StartInfo = startInfo;
process.Start();
var output = string.Empty;
string lineVal = process.StandardOutput.ReadLine();
while (lineVal != null)
{
output += "\n" + lineVal;
lineVal = process.StandardOutput.ReadLine();
}
process.WaitForExit();
return output;
} |
Que j'appelle ensuite :
Code:
1 2 3 4 5
|
public const string PATH_PLINK = "\"" + @"\\***\***\**\plink.exe" + "\"";
public const string ARGUMENTS_PLINK = "-ssh {0}@{3} -pw {1} \"mt -f /dev/{2} status\"";
...
var rs = CommandeDos.Execute(Data.PATH_PLINK, string.Format(Data.ARGUMENTS_PLINK, "login", "mdp", drive.NomDrive.ToLower(), "@ipserver")); |
Hop je compile (easy win :) )
Et là.... en fait.... tout ne marche pas comme prévu !! :aie:
la commande me renvoie le message entier lorsque le lecteur est en statut "cartouche présente dans le lecteur" ou "lecteur libre" mais ne renvoi rien si le lecteur est en statut "lecteur en erreur" ou "lecteur occupé"
Je me demande si ça n'est pas dû au fait qu'il n'y a qu'une ligne à renvoyer..
Pourtant quand je fais un "echo /dev/dr8: Input/output error" dans mon logiciel ça fonctionne...
J'ai essayé plusieurs code pour envoyer une commande dos mais c'est toujours pareil.
Dans tous les cas, pour récupérer ce status, il faut que je me connecte au serveur auquel il est rattaché et que j'utilise la commande linux
mt -f /dev/[nom du lecteur] status
Peut être existe-t'il une autre solution pour le faire?
Merci à vous.