Annuler une boucle en modifiant variable $pivot
Résoluadgm1 Messages postés 289 Date d'inscription jeudi 4 octobre 2007 Statut Membre Dernière intervention 1 décembre 2024 - 28 nov. 2024 à 00:55
- Annuler une boucle en modifiant variable $pivot
- Modifier une story facebook - Guide
- Faire pivoter une video - Guide
- Modifier une liste déroulante excel - Guide
- Annuler une offre sur vinted - Guide
- Achat sur Vinted : comment négocier un prix avec un vendeur - Guide
8 réponses
24 nov. 2024 à 10:32
bonjour,
Au moment où tu souhaites que le script s'arrête, tu pourrais par exemple créer un autre fichier, et le script s'arreterait quand il détecte la présence de ce fichier.
23 nov. 2024 à 12:33
Bonjour,
Je ne sais pas, je suis plus à l'aise en Batch, mais pourquoi par une variable appropriée ne pas horodater le nom du fichier logon ou y récupérer la date et l'heure de création et commencer le script programmé au démarrage par une condition qui supprime ce fichier si l'horodatage courant est différent de celui qui est archivé?
23 nov. 2024 à 13:36
ok pourquoi pas pour l horodatage mais ca ne resoudra pas le probleme de la recurence de création du fichier qui est initié par mon script. Quand je supprime le txt manuellement (créé à l'ouverture) il se recréé automatiquement ce qui est bien ce que je souhaite. Mais jaimerais quand même pouvoir forcer la fin de la boucle même si la session est toujours ouverte (ex session verrouillée).
23 nov. 2024 à 14:32
Je ne sais pas.
Tu ne peux pas supprimer ton fichier s'il n'intervient pas dans ton script un bouclage conditionnel testant avec un CmdLet approprié à chacune de tes conditions si par exemple la session est verrouillée et si tant est que dans ces conditions le script continue d'être exécuté.
Je ne sais pas non plus si cela ne passe pas forcément par une GPO ou un contexte AD auquel je ne comprends rien.
Modifié le 23 nov. 2024 à 18:40
oui j'ai deja ma GPO de prête pour lancer un script au verrouillage de la session (tache planifiée) mais justement a cause de cette redondance de création du fichier , la suppression ne marche pas. elle est temporaire et le fichier continue de se recréer. Je cherche donc un script qui annule mon script d'ouverture de session. Ca semble etre la variable $pivot qui joue un rôle.
23 nov. 2024 à 19:05
Cela dépasse sûrement comme je l'ai remarqué mes compétences, mais je ne te suis pas.
Ton script s'exécute tant que ta variable ne vaut pas 0 et tu l'as forcée à une valeur constante de 1: la seule manière de l'interrompre semble être de lui attribuer la valeur 0 en fonction d'une conditionnelle (comme dit, dans les circonstances, je ne sais pas laquelle).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question24 nov. 2024 à 11:31
En effet j'ai voulu mettre une valeur de pivot à 0 pour annuler la redondance. Mais cela ne fonctionne pas, le premier script de l'ouverture de session continue de créer en boucle le fichier txt. Je cherche donc un moyen de forcer l'arret même si la session est ouverte. pour l'instant le seul moyen est de fermer la session (GPO fermeture de session). Tu aurais une idée en batch éventuellment qui fait la même chose ? Un script qui réécrit en boucle et au autre qui arrête la boucle.
24 nov. 2024 à 11:54
Non parce que le problème est de caractériser le verrouillage de la session.
Il semblerait qu'on puisse en obtenir le statut dans un AD via PowerShell:
https://specopssoft.com/fr/blog/comment-verifier-si-un-compte-ad-est-verrouille/
où on peut sans difficulté ramener la valeur de lockedout.
En Batch, je ne pense pas dans l'immédiat à autre chose que de tester si le Process (tel que son nom est rendu dans le gestionnaire des tâches, pas son nom ou son chemin) qui peut caractériser que la session est déverrouillée est actif ou pas ou quand il a été lancé la dernière fois, mais je ne peux pas tester pour choisir un Process caractéristique parce que mon PC n'est jamais éteint ni verrouillé et que je ne sais donc pas voir lequel serait pertinent.
24 nov. 2024 à 16:14
Si je me trompe pas cette solution concerne le statut "compte désactivé" de l'utilisateur dans l'AD. Je pensais plutôt au verrouillage dans le sens "logoff". J'ai essayé ce scxript mais rien n'y fait, la boucle continue de créer le fichier pendant que la session user est verrouillée.
$time = Get-Date -Format "dddd MM/dd/yyyy HH:mm" if (Test-Path P:\logon.txt) { \\srv\logon-Notif.hta Start-Sleep -Seconds 60 Shutdown -l } else { $pivot = 1 DO { # Vérifie si le poste est verrouillé $sessionInfo = query user if ($sessionInfo -match "Disc") { # "Disc" indique une session déconnectée ou verrouillée Write-Output "Le poste est verrouillé. Arrêt de la boucle." $pivot = 0 break Remove-Item -Path P:\logon.txt -Force } # Crée le fichier logon.txt New-Item -Path P:\ -Name "logon.txt" -ItemType "file" -Value "ouverture de session $Env:USERNAME, $time sur le poste $Env:COMPUTERNAME" -Force | Out-Null Start-Sleep -Seconds 10 } while ($pivot -ne 0) }
24 nov. 2024 à 17:59
"logoff", c'est la fin de la session. Le verrouillage, c'est "lock".
Un script, en général, n'est pas affecté par le verrouillage, le verrouillage n'affecte que l'accès interactif de l'utilisateur.
Tu trouveras ici plusieurs techniques pour détecter que l'ordi est verrouillé: https://superuser.com/questions/1170918/determine-remote-windows-screen-locked-or-unlocked-remotely
24 nov. 2024 à 13:43
Bonjour,
Juste par curiosité, je n'ai pas compris l'utilité de la boucle, es-tu sûr d'avoir besoin de cette redondance ?
24 nov. 2024 à 15:51
salut. La boucle a pour but de permettre la présence du fichier txt dans le perso de l'utilisateur tant qu'au moins une session est ouverte (PC1). Sans redondance une fois la même session ouverte sur le PC2 alors le fichier sera supprimé lors de la fermeture automatique de session (GPO) et donc à nouveau une deuxième session pourra être ouverte sur le PC3. Ou alors l'utilisateur pourrait feinter et supprimer manuellement le txt (on pourrait imaginer lui attribuer des droits restreint pour empêcher ça, )
Donc dans l'idée j'aimerais que l'utilisateur ne puisse ouvrir q'une seule et unique session sur le réseau. Dans l’hypothèse où je ne met pas la redondance alors il y aura toujours 2 même sessions potentiellement ouverte sur 2 PC différents.
24 nov. 2024 à 16:10
Ne serait-il pas plus simple, dans le script, d'ouvrir exclusivement un fichier?
Personne d'autre ne pourrait alors l'ouvrir.
24 nov. 2024 à 16:39
je ne comprends pas. Qu'entend tu par "ouverture exclusive" ? En soit c'est pas si grave si l'utilisateur ouvre le fichier logon. Ce qui est génant c'est qu'il soit supprimé à un autre moment que lors d'une fermeture ou verrouillage de session. Pour le moment je parviens à mon objectif uniquement si l'utilisateur pense à bien fermer sa session. Mais si elle se verrouille (au bout de 10min d'inactivité) alors il ne pourra pas s'authentifier sur un autre PC puisque le fichier continuera de se créer en boucle.
24 nov. 2024 à 17:48
Je n'avais pas compris que tu voulais libérer le fichier si la session se verrouille.
Et que devrait-il se passer au déverrouillage de la session?
24 nov. 2024 à 18:16
à tout hasard en stoppant le script si le "ID Event" correspond à la fermeture de session, en principe 4647 ou 4634?
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/auditing/event-4647
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/stop-job?view=powershell-7.4
ou en cherchant s'il en existe un l'évènement correspondant via WMI
Register-WmiEvent -Class win32_(?)
24 nov. 2024 à 19:52
Oui c'est juste pour une sécurité si un utilisateur a oublié de fermer afin qu'il puisse quand même se connecter ailleurs. Et parfois certains font "changer d'utilisateur" ce qui verrouille la session de l'utilisateur actuel. Bref c'est un casse tête c'est sûr. En effet j'ai pas réfléchi a quoi faire quand l'utilisateur déverrouille sa propre session, je dirais qu'il faut reactiver la boucle pour recréer le fichier logon s'il n'existe pas .
28 nov. 2024 à 00:55
Jai finalement trouvé une solution.
En fait pour arréter la boucle il fallait tout simplement stopper le processus powershell en cours. Donc j'ai créé mes 2 GPO , une au verrouillage qui lance ce script pour supprimer le processus powershell de redondance et qui supprime ensuite le fichier txt.
taskkill /F /IM powershell.exe taskkill /f /im pwsh.exe timeout /t 2 del /f /q "P:\logon.txt" exit
Et cet autre script au déverrouillage qui remet en marche la redondance.
Start-Sleep -Seconds 3 $time = Get-Date -Format "dddd MM/dd/yyyy HH:mm" # Crée le fichier logon.txt en boucle if (Test-Path P:\logon.txt) { write-output "logon existe deja" } else { $pivot = 1 DO { New-Item -Path P:\ -Name "logon.txt" -ItemType "file" -Value "deverouillage session $Env:USERNAME, $time sur le poste $Env:COMPUTERNAME" -Force | Out-Null Start-Sleep -Seconds 10 } while ($pivot -ne 0) }