Question Powershell, variables et tâches planifiées

Plus d'informations
il y a 11 ans 3 semaines #19112 par Samuel
Excellente piste en effet, la variable est mise à jour et je récupère bien le nom de mon client léger au moment de la reconnexion.

Une petite difficulté à surmonter, le clientname se trouve dans HKCU\Volatile Environment\x où x est un entier variant pour chaque utilisateur.

Il faut que je modifie mon script pour qu'il recherche le bon x pour pouvoir lire la valeur.

Je m'aperçois que le x correspond au numéro de session, je tente la chose suivante :

[code:1]$UnifiedSessionId = get-rdusersession -collectionname bureau | Where-Object {$_.username -eq $env:username} | Select-Object UnifiedSessionId -expandproperty UnifiedSessionId
$registre = get-itemproperty -path registry::\"HKEY_CURRENT_USER\Volatile Environment\$UnifiedSessionId\"
$client = $registre.ClientName[/code:1]

Et ça fonctionne merveilleusement bien lorsque je suis administrateur.

Je lance le script en tant qu'utilisateur, et là c'est le drame :

get-rdusersession : Il n'existe aucun déploiement des services Bureau à distance sur SRV-RD1.contoso.com. Cette
opération peut être effectuée après la création d'un déploiement. Pour plus d'informations sur la création d'un
déploiement, exécutez la commande «Get-Help New-RDVirtualDesktopDeployment» ou «Get-Help New-RDSessionDeployment».
Au caractère \\ch-condom.com\netlogon\vbs\printers2012R2.ps1:3 : 21
+ $UnifiedSessionId = get-rdusersession -collectionname bureau | Where-Object {$_. ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ( : ) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-RDUserSession


Alors qu'il ne s'agit pas d'un problème de déploiement sur SRV-RD1 car c'est précisément sur lui que je fais mes tests en tant qu'administrateur et que tout fonctionne à merveille.

Je pense que l'environnement utilisateur ne sait pas communiquer avec les services Bureau à distance ou n'a pas le droit mais là, pour contourner, je ne sais pas par quoi commencer.

Il faut que je tente de lister les dossiers de la clé HKCU\Volatile Environment, et vérifier dans chacun si il existe une clé CLIENTNAME.

Ca devient de la bidouille++ ;)<br><br>Message édité par: samche, à: 24/02/15 12:16

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

Plus d'informations
il y a 11 ans 3 semaines #19113 par Laurent Dardenne
samche écrit:

Ca devient de la bidouille++

Faudrait que je vous montre celle que j'ai réalisé pour utiliser l'API SendMessage dans une tâche planifiée ;-)
Là tu en es soit à corriger un bug d'une API, soit combler un manque de l'OS pour ce scénario.
Et s'il existe une solution 'popre' il reste à la trouver...
Pour ton pb essaie d'utiliser un des programmes externes pour lister les sessions, celle en cours est peut être différenciée.

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 3 semaines #19114 par Samuel
C'est bon, au final, j'utilise 2 scripts powershell \&quot;d'appel\&quot;.

Un que j'utilise à l'ouverture de session et qui est lancée par une gpo et qui utilise $env:clientname (le script d'origine en gros qui marchait très bien jusqu'à présent).

Un autre qui est appelé via une tâche planifiée crée par gpo dans l'environnement de l'utilisateur et qui réagit à l'événement 25 du journal Microsoft-Windows-TerminalServices/Operationnal et qui va lire la valeur de CLIENTNAME dans la base de registre comme ceci :
[code:1]$registre = get-childitem -path registry::\&quot;HKEY_CURRENT_USER\Volatile Environment\\&quot;
$cle = get-itemproperty -path registry::\&quot;$registre\&quot;
$client = $cle.ClientName
[/code:1]

Reste à espérer qu'il n'y ait pas un second dossier qui sera créer à cet endroit là sinon je suis bon pour refaire encore des if un peu partout. ;)

La clé ne retourne rien au moment de l'ouverture de session, je ne peux malheureusement pas l'utiliser pour la primo connexion de la journée de l'utilisateur.

J'aurai pu avec des if utiliser le même script supposant que si $env:clientname est vide alors utiliser l'autre méthode mais je n'ai plus de temps à consacrer à ce problème et vu que ça fonctionne parfaitement maintenant, je n'y touche plus. D'autant que les tests sont un peu longs puisqu'il faut faire des déco/reco, fermeture/réouverture de session, ...

Merci beaucoup pour ton aide et toutes les pistes que tu as pu m'apporter, le résultat est là ;)

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

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