Cygwin installé, écrit mon script, testé avec succès. Cependant, lorsque je l'exécute en tant que tâche planifiée Windows, il échoue. Des recherches plus approfondies montrent que tous les programmes ne sont pas disponibles lorsque le script est exécuté de cette manière. Par exemple, Lancer Mintty et taper ls affichera le contenu de mon répertoire. L'exécution de bash.exe à partir de la CLI de Windows me mettra dans une invite "BASH", mais ls n'est pas une commande reconnue.
J'ai essayé le standard
c:\cygwin\bin\bash.exe -l -c "/home/user/logoff.sh"
aussi bien que
c:\cygwin\bin\mintty.exe /bin/bash -l -c "/home/user/logoff.sh"
J'ai ajouté une commande echo qui génère un fichier texte et qui fonctionne, donc je sais que le script est appelé. Le problème semble être lié au fait que les différents programmes ne sont pas disponibles ou qu'il n'aime pas les tuyaux que je fais.
C'est le script que j'essaye de lancer.
for user in user1 user2 user3 ;
do
id=$(query user $user 2>> /dev/null | awk '{ print $3 }' | sed -e '/ID/ d')
if [[ "$id" =~ ^[1-9][0-9]?$ ]]; then
logoff $id
echo "$user was logged off" >> logg_off.log
fi
done
Des idées?
MODIFIER
- J'ai inséré le nom du fichier dans la tâche planifiée, raison pour laquelle l'exécution a échoué.
- Vous ne savez toujours pas pourquoi le script ne finirait pas. J'ai supprimé tous les utilisateurs sauf un de la liste et tout fonctionne comme prévu. Il faudra attendre ce soir pour vérifier si je peux ou non déconnecter les autres utilisateurs en un seul passage.
/usr/bin/awk
, etc.Réponses:
Ainsi, après quelques manipulations supplémentaires, j'ai découvert que l'ID de session était supprimé lorsque l'utilisateur était déconnecté. Au lieu d'insérer un onglet ou un élément similaire en tant que paramètre de remplacement, il insère simplement des espaces. Ainsi, lorsque AWK imprime, la colonne affiche les mauvaises informations. Vous trouverez ci-dessous le script final exécuté en tant que tâche planifiée dans Windows Server.
la source