Hi,

Using ZENworks 6.5, with the imaging linux of ZDM7
We started having some weird results attemting to restore a second
windows (ntfs) partition with scripted images.

Actually, our script is performing a couple of operations, like asking
for the wks name, calculating partitions size, etc.

it seems to work, only if I strip my script.
The original script is 325 lines, and growing.
It's about 7k

When stripping it to a couple of lines (~20) it runs fine.
When it's complete, it sometimes fails with segmentation fault,
sometimes it skips files.
Other times it runs files, but windows doesn't boot (blue screen, or
checkdisk error, files missing, files reappearing).

Is there a limit on the size of the script ?
Here's a copy of my script :

For those who are interested, you can steal this script to calculate
size of partitions.. ;) you need zen7 scripting engine...(bash) ;)




#Aller chercher nom de la machine sur disque avec ZISVIEW
ZISNAME=`zisview Name | head -n1`

#Dfinir les options par dfaut
IMGSVR=192.168.150.2
IMGSVR_BACKUP=192.168.150.3
IMGSVRPATH=//"$IMGSVR"/grp/grp/formation/zen/image
zisedit tree="form-tree" > /dev/null;

WSMODL="1"
SFORMPROD="1"
CONTEXTE="formation.que.form"
Pause=""
Bidon=""




#Dfinition du nom du poste de travail
#Si aucun nom est trouv
if [ "$ZISNAME" = "" ]; then
echo -e "Aucun nom de machine trouve."
echo -e "Ceci est donc un nouveau poste.\n"

#tant que que pas de nom de machine saisi
while test "$WSNAME" = ""; do
echo -n "Entrer un nom de machine (Ex: B2900): "
#attendre un nom de machine
read WSNAME;
done;

# Si un nom de machine est saisi
if test "$WSNAME"; then
# crire ce nom sur le disque + WorkGroup MCE
zisedit Name=$WSNAME > /dev/null;
zisedit WorkGroup="MCE" > /dev/null;
fi

else
WSNAME=
#afficher le nom de la machine
echo ""
echo "Nom actuel de la machine: $ZISNAME"
echo ""

#Afficher et attendre nouveau nom ou Enter
echo -n "Entrer un nouveau nom ou appuyer sur <Enter> pour garder
celui-ci ($ZISNAME): "
read WSNAME

#si un nom est saisi
if test ! "$WSNAME" = ""; then
echo "Nom change pour: $WSNAME"
#Ecrire sur le disque le nouveau nom
zisedit Name=$WSNAME > /dev/null;
zisedit WorkGroup="MCE" > /dev/null;
else
WSNAME=$ZISNAME
fi
fi



#Slection du type d'ordinateur
#Afficher le choix des types d'ordinateurs
echo ""
echo "Modele d'ordinateur"
echo "----------------------"
echo "1 PC de table"
echo "2 Portatifs"
echo ""
echo "Choisir le modele"
echo -n "Defaut (1): "
#attendre le choix de modele
read WSMODL_TEMP;
WSMODL=""
Bidon=""

if [ "$WSMODL_TEMP" = "1" ]; then
WSMODL="PC"
fi
if [ "$WSMODL_TEMP" = "2" ]; then
WSMODL="PORTATIF"
fi
# Si WSMODL est encore vide, affecter le choix par defaut
if [ "$Bidon" = "$WSMODL" ]; then
WSMODL="PC"
WSMODL_TEMP="1"
fi




#Afficher le choix de contexte
echo ""
echo "Choisir le contexte par defaut"
echo "----------------------"
echo "1 formation.que.form"
echo "2 srv.que.form"
echo ""
echo "9 Aucun Autologin Reseau - Ranger dans Stock Room ou pas
d'usager affecte."
echo ""
echo "Choisir"
echo -n "Defaut (1): "
#attendre le choix
read CONTEXTE_TEMP;
Bidon=""
CONTEXTE=""

#Si CONTEXTE_TEMP est egal 1
if [ "$CONTEXTE_TEMP" = "1" ]; then
CONTEXTE="formation.que.form"
fi
#Si CONTEXTE_TEMP est egal 2
if [ "$CONTEXTE_TEMP" = "2" ]; then
CONTEXTE="srv.que.form"
fi
#Si CONTEXTE_TEMP est egal 9
if [ "$CONTEXTE_TEMP" = "9" ]; then
CONTEXTE="AucunAutologin"
fi

# Si Contexte est encore vide, choisir valeur par defaut
if [ "$Bidon" = "$CONTEXTE" ]; then
CONTEXTE="formation.que.form"
CONTEXTE_TEMP="1"
fi





#Afficher le choix concernant la salle de formation
echo ""
echo "Est-ce la salle de formation ?"
echo "----------------------"
echo "1 Non"
echo "2 Oui"
echo ""
echo "Choisir"
echo -n "Defaut (1): "
#attendre le choix
read SFORM_TEMP;
SFORM=""
Bidon=""

#Si Oui
if [ "$SFORM_TEMP" = "2" ]; then
SFORM="Salle de formation"
#Afficher le choix de l'arbre
echo ""
echo "Choisir l'arbre ?"
echo "----------------------"
echo "1 MCE_TREE"
echo "2 FORM-TREE"
echo ""
echo "Choisir"
echo -n "Defaut (1): "
#attendre le choix
read ARBRE_TEMP;
ARBRE=""
Bidon=""


#Si en formation
if [ "$ARBRE_TEMP" = "2" ]; then
ARBRE="FORM-TREE"
fi
if [ "$ARBRE_TEMP" = "1" ]; then
ARBRE="MCE_TREE"
fi
if [ "$Bidon" = "$ARBRE" ]; then
ARBRE="MCE_TREE"
ARBRE_TEMP="1"
fi


fi
if [ "$Bidon" = "$SFORM" ]; then
SFORM=""
SFORM_TEMP="1"
fi





#Confirmation des choix
#affichage msg et envoi de l'image de base sur le poste
echo ""
echo ""
echo ""






echo "Voici les informations saisies :"
echo "$WSNAME"
echo "$CONTEXTE"
echo "$WSMODL"
echo "$SFORM $ARBRE"


echo ""
echo "Appuyer sur <ENTER> pour lancer la copie... ou CTRL+ALT+DEL pour
Annuler"
read Pause;
echo ""
echo ""
echo ""







#Affectation aux variables des images choisies
ImageBase=$IMGSVRPATH/XPv300.zmg
ImageCTemp=$IMGSVRPATH/c/temp/ctemp.zmg
ImageCONTEXTE=$IMGSVRPATH/c/temp/$CONTEXTE.zmg


#si le modele choisi est un portatif
if [ "$WSMODL_TEMP" = "2" ]; then
ImageDrivers=$IMGSVRPATH/c/drv/Drivers_Portatifs.zmg

fi
#si le modele choisi est un PC
if [ "$WSMODL_TEMP" = "1" ]; then
ImageDrivers=$IMGSVRPATH/c/drv/Drivers_PC.zmg

fi

################################################## #############
############ ##################
############ Prparation et envoi des images ##################
############ ##################
################################################## #############

#Dclarer une variable pour indiquer si on doit rapporter le backup
CHEMIN_BACKUP=//"$IMGSVR_BACKUP"/MAIL/BACKUP
IMGP2=${CHEMIN_BACKUP}/ImageVide_Partition2.zmg

#Prendre en backup la deuxime partition
echo $CHEMIN_BACKUP
img makep $IMGSVR_BACKUP ${CHEMIN_BACKUP}/${WSNAME}_Partition2.zmg x1 x3 x4

#Si la partition existante est de 2 Go
export ESPACEPARTITION2=`fdisk -l | grep hda2 | head -n1 | cut -f26 -d"
" | cut -f1 -d"+"`
echo $ESPACEPARTITION2
if test $ESPACEPARTITION2 = 2048287; then
#Indiquer dans le IMGP2 le nom de l'image rapporter
IMGP2=${CHEMIN_BACKUP}/${WSNAME}_Partition2.zmg

fi

#Dtruire toutes les partitions
img pd1
img pd2
img pd3
img pd4

#Calculer pour recreer la partition principale et creer une secondaire
export ESPACEDISQUE=`fdisk -l | grep hda | head -n1 | cut -f5 -d" "`
export ESPACEDISQUE=`expr $ESPACEDISQUE / 1024`
export ESPACEDISQUE=`expr $ESPACEDISQUE / 1024`
echo $ESPACEDISQUE
export ESPACEPREMIEREPARTITION=`expr $ESPACEDISQUE - 2200` #2097
echo $ESPACEPREMIEREPARTITION

img pc1 ntfs $ESPACEPREMIEREPARTITION
img pa1

#Creer la 2e Partition
#img pc2 ntfs 2000




#Copier l'image principale sur le poste
echo "Chargement de l'image de base"
img rp $IMGSVR $ImageBase a1:p1

#Copier le dossier c:\temp sur le poste
echo "Chargement de l'image CTemp"
img rp $IMGSVR $ImageCTemp

#Copier le dossier c:\drv sur le poste
echo "Chargement de l'image de Drivers"
img rp $IMGSVR $ImageDrivers


#Si la salle de formation est en production (MCE_TREE)
if [ "$SFORM_TEMP" = "2" ]; then
ImageFlag=$IMGSVRPATH/c/mcemaj/SalleFormationProd.zmg
img rp $IMGSVR $ImageFlag
fi


##Si contexte est different de Aucun
#if [ "$CONTEXTE" != "Aucun Autologin" ]; then
#Copier le fichier REG d'autologin dans contexte choisi dans c:\temp
echo "Chargement de l'image de contexte"
img rp $IMGSVR $ImageCONTEXTE
#fi

#Copier la deuxime partition (Vide ou la partition prise en backup)
#img rp $IMGSVR_BACKUP $IMGP2 a1:p2



#Fin
#si erreur
if [ "$?" = "59" ]; then
echo "Erreur de copie..."
read Pause;
else
#indiquer l'image envoyee
zisedit LastBaseImage=""

fi

#redmarrage
echo "Redemarrage..."