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 :
lecteur occupé.
cartouche présente dans le lecteur
lecteur en erreur
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 !
Du coup je m'y mets :
Une classe pour envoyer une commande DOS et récupérer son résultat :
Que j'appelle ensuite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Hop je compile (easy win
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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"));)
Et là.... en fait.... tout ne marche pas comme prévu !!
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.
Partager