Script vmware, utiliser resultat d'une commande

Bonjour à tous,

je réaliser un script pour une machine vmware.

J’ai cette commande:

vmrun -T server -h https://127.0.0.1:8333/sdk -u **** -p ****** list | grep standard

Cette commande me retourne ceci:

[standard] Windows Server 2003 Standard Edition/Windows Server 2003 Standard Edition.vmx

(Je n’ai qu’une seul machine virtuelle actuellement.)

le but serait qu’avec la commande je liste l’ensemble des vm, qu’il réalise pour chaque ligne une commande. mais je bloque.

j’avais pensé à ceci:

for vm in  `vmrun -T server -h https://127.0.0.1:8333/sdk -u ******* -p ****** list | grep standard`
do
        echo $vm
done

Mais il me retourne ceci:

 [standard]
Windows
Server
2003
Standard
Edition/Windows
Server
2003
Standard
Edition.vmx

je voudrait qu’il me retourne ceci sur une ligne.

Est-ce possible ? ma démarche n’est pas la bonne?

Merci

guigui69

Ça suffit pas ça ? (j’ai modifié la regexp uniquement pour la rendre plus restrictive)

Sinon tu fais ça pour régler le problème avec ta boucle :

var=$IFS IFS="\n" for vm in `vmrun -T server -h https://127.0.0.1:8333/sdk -u ******* -p ****** list | grep '^\[standard\]'` do echo $vm done IFS=$var
si je ne me trompe pas.

Bonjour,

Pour eviter de modifier la valeur de IFS tu peux faire ceci :

vmrun -T server -h https://127.0.0.1:8333/sdk -u ******* -p ****** list | grep standard | while read vm do echo $vm done

niquel

j’arrive à avoir ceci:

[standard] Windows Server 2003 Standard Edition/Windows Server 2003 Standard Edition.vmx

Encore une question est-il possible avec un grep à l’interieur du

vmrun -T server -h https://127.0.0.1:8333/sdk -u ******* -p ****** list | grep standard | while read vm do echo $vm done

Voici le script que j’essaie de réaliser:


vmrun -T server -h https://127.0.0.1:8333/sdk -u **** -p ***** list | grep standard | while read vm
do
        echo vmrun -T server -h $HTTP -u $USER -p "$MDP" snapshot "$vm" Snap1

        #rm -R REP_DES[$7DAY]*.*
        #echo $REP__SOURCE
        #echo cp -R $REP_SOURCE"Windows\ Server\ 2003\ Standard\ Edition/"      $REP_DES[$DAY]Windows\ Server\ 2003\ Standard\ Edition/

       #vmrun -T server -h $HTTP -u $USER -p "$MDP" deleteSnapshot "$vm" Snap1

done

1- il snapshot l’image vmware, puis copie l’image sur un autre emplacement, et supprime le snap à la fin.

est-il possible est un grep de retraiter le $vm pour avoir ceci:

[quote]
Windows\ Server\ 2003\ Standard\ Edition/[/quote]

Merci d’avance pour votre aide.

guigui69

Bonjour,

Pour obtenir que la partie entre le dernier / et vmx tu peux faire ceci, la seconde partie remplace les espaces par "\ " :

Merci,

comment je doit faire pour le mettre en variable

je voudrait le mettre en

$DOSSIER = $vm | sed 's#^./(.).vmx#\1#'g | sed 's# #\ #'g
$DOSSIER = echo $vm | sed 's#^./(.).vmx#\1#'g | sed 's# #\ #'g
mais ça ne fonctionne pas.

Quel paramètre est manquant pour l’insérer dans ma variable? Doit-je la déclarer avant dans mon script?

vmrun -T server -h $HTTP -u "$USER" -p "$MDP" list | grep standard | while read vm
do
        echo vmrun -T server -h $HTTP -u $USER -p "$MDP" snapshot "$vm" Snap1
        echo $vm | sed 's#^.*/\(.*\)\.vmx#\1#'g | sed 's# #\\ #'g > $DOSSIER
        #DOSSIER= $vm | sed 's#^.*/\(.*\)\.vmx#\1#'g | sed 's# #\\ #'g
        echo $DOSSIER
        #echo rm -R REP_DES[$MDAY]*.*
        #echo $REP__SOURCE
        #echo cp -R $REP_SOURCE $DOSSIER $REP_DES[$DAY] $DOSSIER

        #echo vmrun -T server -h $HTTP -u $USER -p "$MDP" deleteSnapshot "$vm" Snap1

done

guigui69

Bonjour,

Ta demande n’est pas clair.

Qu’elle partie souhaites tu récuperer dans ce contenu :

[standard] Windows Server 2003 Standard Edition/Windows Server 2003 Standard Edition.vmx La partie avant le / ou après ?

Si c’est un dossier pourquoi rajouter des \ avant les espaces, il suffit de mettre le chemin complet entre guillemet ?

Sinon pour affecter echo $vm | sed 's#^.*/\(.*\)\.vmx#\1#'g | sed 's# #\\ #'g dans une variable, il faut faire ceci : DOSSIER="$(echo $vm | sed 's#^.*/\(.*\)\.vmx#\1#'g | sed 's# #\\ #'g)"

Mon but est de récupérer Windows Server 2003 Standard Edition/ en rajoutant des \ devant chaque nom.

Mais bon avec la précédente

echo $vm | sed 's#^.*/\(.*\)\.vmx#\1#'g | sed 's# #\\ #'g

je récupérait le ce que je voulait sans le / à la fin.

Bonjour,

La syntaxe que je t’ai donné n’est pas correcte car elle recupere la partie après le /.

La ca tombait bien car le nom du repertoire et le nom du fichier sont identique mais se ne sera pas forcement le cas dans ton environnement, voici la ligne corrigé avec affectation dans la variable DOSSIER

Par contre, il faut que la syntaxe soit toujours la même a savoir :

Ok merci,

la syntaxe sera toujours la même (normalement) car cette liste est générer par vwmare.

je regarde ca et je test.

guigui69