La documentation de Dollar Universe, comme la quasi-totalité des retours d’expérience disponibles en ligne, décrit des environnements Unix et des traitements en shell. Les plans de production sous Windows Server, avec des scripts BAT et PowerShell, sont pourtant nombreux, et ils posent des problèmes qui leur sont propres.
Le code retour est le piège numéro un. Un script PowerShell se termine par défaut avec un code nul, y compris lorsqu’une exception a été levée en cours de route. L’uproc voit un succès, la chaîne continue, et l’erreur ne se manifeste que plus loin. Trois réflexes ferment ce trou : positionner $ErrorActionPreference sur Stop en tête de script, encadrer le corps du traitement dans un bloc try/catch, et terminer par un exit explicite dont la valeur est décidée par le script. Si le script appelle un exécutable externe, c’est $LASTEXITCODE qu’il faut relayer, et non le résultat de la commande PowerShell qui l’enveloppe.
Le script qui fonctionne en manuel et échoue en ordonnancé est le second classique, et la cause est presque toujours la même. L’exécution manuelle se fait sous votre compte, dans votre session ouverte, avec vos lecteurs réseau montés et votre profil chargé. L’uproc, elle, s’exécute sous le compte de service, sans profil, sans lecteur mappé, avec sa propre politique d’exécution. Les corrections sont connues : chemins UNC absolus plutôt que lettres de lecteur, aucun chemin relatif, politique d’exécution vérifiée pour le compte concerné, variables d’environnement déclarées dans le script plutôt que supposées présentes.
L’encodage ferme la liste, et c’est le plus rageant. Un script qui écrit des accents dans un fichier de trace peut produire un contenu illisible selon la page de code active, ce qui rend inexploitable exactement le document dont on a besoin en pleine nuit.
Ce qu’il faut en retenir si ces détails ne sont pas votre métier : un traitement qui remonte un statut faux est plus dangereux qu’un traitement qui échoue franchement. La fiabilité d’un plan de production se joue autant dans le code des scripts que dans le paramétrage de l’ordonnanceur.