Question Limit license usage of batched Datakustik CADNAA

Plus d'informations
il y a 12 ans 11 mois #10410 par sebastien
Bonjour à tous,
English details at end of post

Récemment, la problématique suivante s'est présentée à moi : l'application cadnaa (calcul de dispersion sonore. Éditeur Datakustik) qui fonctionne en mode batch sur un serveur utilise en permanence une licence dans l'attente d'un hypothétique calcul. Le but est de limité l'utilisation d'une licence au seul moment ou il y a des calculs à faire pour la laisser disponible pour les ingénieurs.

Fonctionnement de l'application:
Un répertoire \IN\ ou les users mettent leurs calculs.
Un répertoire \OUT\ ou il récupèrent leurs résultats.
L'application en mode batch monitore le répertoire IN et lance le calcul si un fichier .cna est présent. Lors du calcul, le fichier change d’extension en .cnc.

Problématiques :
- Mon répertoire IN se trouve sur le réseau et sur une machine autre que celle qui effectue les calculs. Si le calcul se lance avant la fin de la copie dans le répertoire IN l'application 'freeze' et le fichier reste en extension .cnc. Il faut alors une action humaine en remote desktop sur le serveur pour relancer l'appli. Les ingénieurs n'ont pas d’accès RD et personne ne sait que l'appli est freezé.
- Lorsque aucunes licences n'est disponible, l'application, après 120 secondes affiche un message d'erreur, imposant la encore une action humaine pour cliquer sur un bouton.

J'ai bien conscience que le code suivant n'a que peu d’intérêt pour la plupart des gens et que pour la majorité des scripteurs de powershell-scripting.com il va paraitre maladroit, mais il fait le job et j'aurai bien aimé le trouver lorsque j'ai mis en place cette appli:whistle: . Donc voila :

[code:1]
$date = get-date -uformat \"%d-%m-%Y %R :\"
echo \"$date Starting script\"
echo \"$date Starting script\" >> \\mon_serv\data\CADNAA\LOG\cadnaa_batch_log.txt
$log_file = Get-Item \\mon_serv\data\CADNAA\LOG\cadnaa_batch_log.txt

do {
if ((Get-Item \"\\mon_serv\data\CADNAA\IN\\"«»).exists){
if ((@(Get-ChildItem \\mon_serv\data\CADNAA\IN\* -include *.cna,*.cnc).count -ge 1) -and (!(Get-Process cna32 -ea 0)))
{$date = get-date -uformat \"%d-%m-%Y %R :\"
echo \"$date file found in IN folder, starting CADNAA\" >> $log_file
echo \"$date file found in IN folder, starting CADNAA\"
Start-Sleep 120 #120s security laps time for compute not to start before file fully copied on server.
Start-Process -FilePath \"C:\Program Files (x86)\Datakustik\CadnaA\cna32.exe\" -ArgumentList \"/batch=1\"
Start-Sleep 200 #Cadnaa License errors came 120s after start. Wait 200s to be safe.
if ((Get-Process cna32 -ea 0) -and ((Get-Process cna32).MainWindowTitle -eq \"HASP SRM Protection System\"«»)) # License error detection based on window name
{$date = get-date -uformat \"%d-%m-%Y %R :\"
echo \"$date No license available. Stopping CADNAA\" >> $log_file
echo \"$date No license available. Stopping CADNAA\"
Stop-Process -Name \"cna32\" -Force
}
}
elseif (((Get-Item \"\\mon_serv\data\CADNAA\IN\\"«»).GetFiles().count -le 0) -and (Get-Process cna32 -ea 0))
{$date = get-date -uformat \"%d-%m-%Y %R :\"
\"$date No file found in IN folder, stopping CADNAA\" >> $log_file
echo \"$date No file found in IN folder, stopping CADNAA\"
Stop-Process -Name \"cna32\" -Force}
}
Start-Sleep 30
}While ($true)
[/code:1]

Pour la petite anecdote, j'ai lutté un bon moment avec la commande :
[code:1](Get-ChildItem \\mon_serv\data\CADNAA\IN\* -include *.cna,*.cnc).count[/code:1]
Cette dernière ne renvoyée rien si le nombre de fichiers était égal à 1. Le @ à résolu mon problème. Solution trouvée ici : www.eggheadcafe.com/microsoft/Powershell...ell-count-issue.aspx

Si vous voyez des choses qui auraient pu être facilement améliorées, n'hésitez pas à m'en faire part.

Bon script à tous.

This script starts and stops Cadnaa in batch mode depending on the presence or not of cna/cnc files in IN folder. The script manages lack of license and HASP errors by stoping cadnaa and restarting it.<br><br>Message édité par: sebasti1, à: 12/10/11 15:36

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.098 secondes
Propulsé par Kunena