Analyse de sortie smbclient avec script PERL

Fermé
alfonsos - 4 juin 2007 à 11:12
 killtiret9 - 17 mai 2008 à 18:02
j'ai le niveau avoisinant 00 en perl et je viens d'heriter d'un script PERL de sauvegarde de stations windows. Ce script fonctionnait correctement sur une red hat 7 mais passé sous Debian etch ca ne fonctionne plus (a savoir il detecte toutes les stations comme etant sous W98 et non la plupart sous qui sont sous XP...)
Apparement c'est la sortie de smbclient qui n'est pas correctement interpretée:La variable $_ ne prend pas en compte la premiere ligne de la sortie de smbclient, et bien sur c'est la ligne qui indique:
Domain=[domain] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
Donc ma variable $XP reste troujours à 0 et mes postes sont toujours interprete comme des postes windows 98...
Mais alors pourquoi cette ligne est prise en charge sous Redhat et non sous Debian???
Je joint la partie concernée du script s'il y a quelques ames charitables qui voudrait bien y jeter un oeil.
Un grand merci par avance!
alf
$argsmbclt="smbclient -L ".$STATION." -U administrateur%password -W domain |";	
		#print("On lance smbclient\n");
		open(SMB,$argsmbclt);
		#print("Fin de smbclient\n");
		#print("Début Analyse partage\n");
		$k=0;
		$XP=0;
		while (<SMB>)
		{
			if (($_=~ m/Windows/))
			{
				$XP=1;
				#print("C est un poste WXP $k\n");
			}
			$k++;
			#print ("$k\n");
			if ($k>=4)
			{
			if ($_=~ m/Server/)
			{
				#print(" on a trouvé le mot server donc fin de la boucle\n");
				last;
			}
			else
			{	
				#print("ligne $k pertinente donc analysée\n");	
				#print(" PARTAGE --> @tempo1[0]\n $_");
				if (($_=~ m/C-ST/)||($_=~ m/CST/))
				{	
					@tempo1=split();
					#print(" mise en tableau effectuée!\n");	
					$PARTAGE=@tempo1[0];
					$tabpartage{$STATION}=$PARTAGE;
					if ($XP==1)
					{	
						$poste="WXP";
						$XP=0;
					}
					else
					{	
						$poste="W98";
					}
					last;
					#print(" Partage ok --> @tempo1[0\n");
					#print("On peut sortir de la boucle\n");
				}
			} 
		}
		}
		#print("Fermeture descripteur SMB\n");
		close (SMB);
		#print("descripteur SMB fermé\n");
		print("$ip $poste --> $STATION --> $PARTAGE\n");
A voir également:

1 réponse

ya tout faux dans ce script
open (SMB, " | blabla")
sleep (5);
print SMB ("blabla");
etc ..
0