Définir variable comprise dans %computername%

adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 - 16 oct. 2023 à 00:11
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 - 20 oct. 2023 à 18:54

bonjour

Pour installer veyon sur des postes bien specifique, des poste profs en salle info, je voudrais définir une variable qui est uniquement le début de %computername%.

En gros mon script identifie si la machine fait partie des postes prof qui doivent recevoir le VeyonMaster. Or j'ai spécifié le nom de la salle pour faire l'installe ce qui correspond à une parie seulement du nom de la machine (les premiers caractères).

Donc si mon poste s'appelle B21-xx-PROF alors il va devoir installer certaine config pour VeyonMaster et il faut définir la variable %room% qui sera B21. Et ainsi de suite pour tous les postes concernés.

Comment sélectionner juste ce qu'il ya avant le tiret "-" dans %computername% ?

Du style set /p room=%computername% moins "-W10-PROF" ou "-PROF"

chcp 65001 >NUL

@echo off
echo.%computername%|findstr /i "A01-PROF A13-W10-PROF A14-PROF A15-PROF A310i-BB-PROF A310v-PROF A33-PROF A35-PROF" >nul 2>&1 && goto INSTALL_PROF_INFO || goto INSTALL_SOLO


:INSTALL_SOLO
echo installation de VEYON pour PC ELEVE ou PROF nonINFO (noMASTER) 
if not exist "C:\Program Files\Veyon\veyon-cli.exe" (
"\\srv-dc1\applications$\veyon\veyon-4.8.2.0-win64-setup.exe" /S /NoMaster /NoStartMenuFolder /ApplyConfig=\\srv-dc1\applications$\veyon\configuration_pceleve.json


) else (
echo VEYON est deja installe
pause
)

:INSTALL_PROF_INFO
echo installation de VEYON MASTER pour pc PROF salle INFO
set /p room=%computername% ???? 

if not exist "C:\Program Files\Veyon\veyon-master.exe" (
\\srv-dc1\applications$\veyon\veyon-4.8.2.0-win64-setup.exe /S /NoStartMenuFolder /ApplyConfig=\\srv-dc1\applications$\veyon\configuration_pcprof.json

"C:\Program Files\Veyon\veyon-cli.exe" networkobjects import \\srv-dc1\applications$\veyon\salles\%room%.csv location %room% format %%name%%;%%host%%;%%mac%%


) else (
echo VEYON est deja installe
pause
)

6 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
16 oct. 2023 à 06:23

Bonjour

Il faut que tu extraits le texte qui se situe avant le tiret.

Par exemple

for /f "tokens=1 delims=-" %%a in ("%computername%") do (
  echo %%a
  )

2
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10
16 oct. 2023 à 00:41

pour préciser. C'est à la ligne 20 que je cherche ma formule.

J'ai testé ça qui me prend les 3 premiers caractere sauf que ca marche pas pour 100% des cas. il y a des salles qui ont plus de 3 caracteres comme B310 ou A310i.

SET "room=%computername:~0,3%"
1
brucine Messages postés 14219 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 avril 2024 1 792
16 oct. 2023 à 07:27

Bonjour,

Pendant que je passe par là, tu n'as pas donné l'écho pour ton histoire de CSV, ça fonctionne comme tu veux?

0
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10 > brucine Messages postés 14219 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 avril 2024
20 oct. 2023 à 01:47

oui ca marche en partie merci. Je vais commenter dans le post en question

0
brucine Messages postés 14219 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 avril 2024 1 792
16 oct. 2023 à 07:58

Jordane45 a raison; si tu ne veux pas ou ne peux pas passer par une boucle FOR pour une raison ou une autre, l'alternative par SET consiste à couper tout ce qu'il y a après le premier tiret:
 

set room=%computername:-="&:"%"
1
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10
20 oct. 2023 à 01:45

 merci pour l'astuce jordane j'avais en effet deja trouvé avec la boucle for mais pas tres commode je trouve car il faut remettre une commande chcp:

chcp 65001 >NUL
set poste=%computername%
for /f "tokens=1 delims=-" %%a in ("%poste%") do set room=%%a

Avec la proposition de brucine ca va nikel, par contre il y avait une erreur des guillemets en trop, ca donne ça :

set room=%computername:-=&:"%"

J'ai un autre soucis si qqun peut m'aiguiller. Dans l'idée je souhaite rediriger le script vers :INSTALL_SOLO si ce n'est pas un poste parmis la liste que je prédéfini à la ligne 4. Mais dans l'état actuel mon script ne marche que pour les pc de la liste et ne va pas appliquer pour tous les autres postes la série de commande "INSTALL_SOLO

Ou est l'erreur dans la ligne ci dessous?

echo.%computername%|findstr /i "A01-PROF A13-W10-PROF A14-PROF A15-PROF A310i-BB-PROF A310v-PROF A33-PROF A35-PROF" >nul 2>&1 && goto INSTALL_PROF_INFO || goto INSTALL_SOLO
0
brucine Messages postés 14219 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 avril 2024 1 792
20 oct. 2023 à 10:44

Bonjour,

Dans un cas comme dans l'autre CHCP 65001 n'est pertinent que s'il existe dans les variables des caractères spéciaux.

Le bug est double:
-FINDSTR est rapporté ne pas être fiable en recherche multi-critères si les critères de recherche n'ont pas la même longueur.

-De toute façon, ta syntaxe repose sur une erreur de la commande FINDSTR qui n'existe pas: elle est de toute façon effectuée avec succès et se contente de rendre selon le cas ERRORLEVEL 0 ou 1, on ne peut donc pas piper sa réussite ou son échec par || ou &&.

Supposons que j'aie créé une liste des noms d'ordinateurs prof.txt correspondant à ta liste FINDSTR; je décide que le nom d'ordinateur recherché est name puisque je ne peux bien sûr pas tester en temps réel sur mon nom d'ordinateur:

set name=A01-PROF
findstr /i %name% prof.txt >nul
if %errorlevel% equ 0 goto INSTALL_PROF_INFO
goto INSTALL_SOLO

:INSTALL_PROF_INFO
set room=%name:-=&:"%"

A l'idéal on devrait non pas faire une liste prof.txt mais une liste salle.txt (toutes) et y tester par une boucle si le nom "prof" apparaît dans le nom de salle ou, si ce n'est pas toujours le cas, l'opposer à la liste prof.txt: on ne va pas alors chercher un nom d'ordinateur en particulier mais tous et les traiter par une boucle conditionnelle sur le nom prof ou la présence dans cette liste.

 

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10
20 oct. 2023 à 12:49

ok je vois en gros l'erreur du findstring

Mais il n'ya pas moyen d'indiquer dans le script lui même les noms de PC qui doivent installer A (:INSTALL_PROF_INFO) et de convenir par logique que tout le reste doit installer B (:INSTALL_SOLO)

En fait je souhaiterais faire la commande suivante :

Si le poste s'appelle XX-PROF, YY-PROF,.... alors rediriger vers l'installation A et dans tous les autres cas rediriger vers B

Si je comprend bien ta proposition il faudrait que je créé un fichier .txt avec tous mes postes qui doivent pointer vers l'installation A. Puis j'indique que si il trouve une valeur comprise dans le .txt alors il installe A et sinon il installe B. C'est bien ça? Mais dans ce cas à quoi sert en début de script la ligne set name=A01-prof? puisque selon le poste qui lit le script il peut avoir différents noms.

0
brucine Messages postés 14219 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 avril 2024 1 792
20 oct. 2023 à 13:46

J'ai pris comme je t'ai exposé la ligne 1 au lieu de %computername% parce que le mien ne contient pas XX-PROF, la liste texte ne fait que se substituer à ta ligne FINDSTR.

Si tu utilises %computername% comme étant le nom réel d'un des PC, l'installation sera A ou B selon son type.

Je n'ai d'ailleurs même pas besoin de m'embêter s'ils s'appellent tous XX-PROF

J'écris set name=%computername:~-4% et je teste si name vaut "PROF".

 Pour automatiser la chose sans entrer à la main le nom du poste cible (et assumant que NetBios est activé sur le réseau), il faut sans doute à moins d'une commande spécifique lister via NET VIEW puis isoler dans la sortie chaque nom,
\\BRUCINE10 blabla donnera BRUCINE10 en supprimant par SET les 2 premiers caractères et en ne prenant que le premier "token" (le deuxième, blabla, étant le nom de description s'il existe).

0
brucine Messages postés 14219 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 avril 2024 1 792 > brucine Messages postés 14219 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 avril 2024
20 oct. 2023 à 14:05

Pour un seul, comme ça (pour plusieurs, je dois comme d'habitude utiliser l'expansion de la variable ou placer le traitement à partir de la réduction du nom de la variable dans une sous-routine CALL):

 

for /f %%a in ('net view ^| findstr /b \\') do (
 set name=%%a
)
 set "name=%name:~2%"
 echo %name%
pause
0
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10
20 oct. 2023 à 14:24

J'ai essayé ça

set name=%computername%
findstr /i %name% "\\srv-dc1\appli$\veyon\pc_prof_info.txt" >nul
if %errorlevel% equ 0 goto INSTALL_PROF_INFO else goto INSTALL_SOLO

mais ca me met l'erreur

FINDSTR : Impossible d'ouvrir \\srv-dc1\appli$\veyon\pc_prof_info.txt

Dois y avoir encore une faite de saisie de mes comandes. Dans mon fichier .txt je dois mettre les noms de machines à la suite avec un espace c'est bien ça? ou un nom de machine par ligne?

0
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10
20 oct. 2023 à 14:42

oups erreur de ma part sur le chemin d'accès au fichier .txt tout simplement. Une fois rectifié ça marche bien avec cette commande visiblement mais uniquement si le poste fait partie de la liste du fichier.txt. pour tous les autres cas il ne se passe rien.

0
brucine Messages postés 14219 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 avril 2024 1 792 > adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024
20 oct. 2023 à 14:53

Si la liste positive est exécutée, c'est que errorlevel 0 est lu, et que donc s'il vaut 1 la condition alternative devrait l'être.

La syntaxe IF est souvent vicieuse, essayer et/ou inverser les conditions (IF NOT ou errorlevel 1) pour vérifier si le branchement se fait bien quitte à mettre n'importe quoi (echo "toto" et pause au début de INSTALL_SOLO)

IF ... (
    goto...
    ) ELSE ( 
    goto...
 )
0
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10 > brucine Messages postés 14219 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 17 avril 2024
20 oct. 2023 à 18:51

ok merci, en fait c'etait une autre commande qui mettait le bazar, une fois supprimé tout est rentré dans l'ordre. C'etait pour installer en plus PsTools sur le poste et il devait y avoir un conflit, j'ai juste déplacé mes commandes en haut du script pour éviter les pb. Donc ca marche bien avec les 2 methodes, soit comme j'avais fait dans mon 1er post :

echo.%computername%|findstr /i "A01-PROF A13-W10-PROF A14-PROF A15-PROF A310i-BB-PROF A310v-PROF A33-PROF A35-PROF" >nul 2>&1 && goto INSTALL_PROF_INFO || goto INSTALL_SOLO

soit à l'aide d'un fichier .txt qui peut etre pratique aussi dans certains cas

set name=%computername%
findstr /i %name% "\\srv-dc1\applications$\veyon\pc_prof_info.txt" >nul
if %errorlevel% equ 0 goto INSTALL_PROF_INFO else goto INSTALL_SOLO
0
adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024 10 > adgm1 Messages postés 255 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 9 avril 2024
20 oct. 2023 à 18:54

pour info le bout de script qui causait le bug :

if not exist "%windir%\system32\pstools\" xcopy /s "\\srv-dc1\applications$\veyon\pstools" "%windir%\system32\pstools\" /Y
SET mypath=C:\windows\system32\pstools
ECHO %Path%|findstr /i /c:"%mypath:"=%">nul || setx Path /m "%Path%";%mypath%
0