Question WinRM & UserInteractive

Plus d'informations
il y a 14 ans 5 mois #5530 par jerome
WinRM & UserInteractive a été créé par jerome
Bonjour,

J'ai configuré sur un 2003 R2 Winrm avec certificat, ca marche bien et sur une machine de rebond j'utilise winrs pour exécuter des cmdlet powershell. Jusque la tout va bien ;)
J'ai essayé mes scripts powershell avec interfaces graphiques, mais la ca ne passe pas, il plante à l'instruction [code:1]$form1.ShowDialog[/code:1]
Je me doutais que ca ne marcherait pas mais j'avais quand même un petit espoir. Si quelqu'un a une explication, je me coucherais moins bete.

Merci

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

Plus d'informations
il y a 14 ans 5 mois #5534 par Laurent Dardenne
Salut,
dje81 écrit:

il plante à l'instruction [code:1]$form1.ShowDialog[/code:1]

Quelle est l'exception déclenchée ?
Dans le même contexte, as-tu essayé de lancer notepad.exe ?
dje81 écrit:

je me doutais que ca ne marcherait pas

J'avais cru comprendre que Winrm était avant tout une couche de transport.
Pour exécuter du code distant on est bien obligé de passer par un runspace PowerShell, à priori Winrm ne me semble pas concerné, mais je peux me tromper.

Le code de création de la WinForm est-il local ou transmis via Winrm ?
Et s'il est transmis as-tu essayé de l'exécuter, en l'ayant au préalable copier sur le distant ?

Tutoriels PowerShell

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

Plus d'informations
il y a 14 ans 4 mois #5562 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:WinRM & UserInteractive
Je me répond à moi-même :P
Laurent Dardenne écrit:

Quelle est l'exception déclenchée ?

[code:1]
$Session1 = new-pssession -ComputerName localhost
Enter-PSSession $session1
cd C:\Program Files\PowerShell\Add-Lib\Demos\Convert-Form\DragAndDrop
Add-PSSnapin Pscx
.\Run-STA.ps1

Error :
Invoke-Apartment : Exception lors de l'appel de « ShowDialog » avec « 0 » argument(s) : « L'affichage d'une boîte de dialogue modale
ou d'un formulaire lorsque l'application ne s'exécute pas en mode UserInteractive n'est pas une opération valide.
Spécifiez le style ServiceNotification ou DefaultDesktopOnly pour afficher une notification à partir d'une application de service. »[/code:1]
Laurent Dardenne écrit:

Dans le même contexte, as-tu essayé de lancer notepad.exe ?

Cela ne fonctionne pas mieux car la session est exécutée dans un process nommé wsmprovhost.exe
Laurent Dardenne écrit:

Pour exécuter du code distant on est bien obligé de passer par un runspace PowerShell, à priori Winrm ne me semble pas concerné, mais je peux me tromper.

Le process wsmprovhost (plugin WinRM) est bien exécuté par WinRM, mais c'est lui qui ne permet pas d'interagir avec le bureau :
[code:1]
Enter-PSSession $session1

$process = [Diagnostics.Process]::GetCurrentProcess()
$process|Select name,MainWindowHandle
#Name MainWindowHandle
#----
#wsmprovhost 0

test-path Variable:«»PsWindowHandle
#false
[/code:1]
Il ne gére pas de handle de fenêtre, l'appel à ShowDialog ne peut donc pas fonctionner dans une session remote (distante ou locale).

On peut toutefois afficher une winform de type MessageBox, en utilisant une surchage particulière de la méthode Show, qui n'est pas dispo sur une Winform :
[code:1]
[void][Reflection.Assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
[Windows.Forms.MessageBox]::«»Show(\"Test\", \"Demo\", \"OK\", \"Information\", \"Button1\", \"ServiceNotification\"«»)
[/code:1]
Cet appel fonctionne ( XP + PSsession locales)

Il semble qu'on puisse configurer WinRM avec un autre provider de host qui pourrait autoriser l'exécution d'un GUI, mais là on quitte le scripting.

Voir le fichier about_Remote_FAQ.txt<br><br>Message édité par: Laurent Dardenne, à: 1/11/09 17:39

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 10 mois #11814 par Greder
Réponse de Greder sur le sujet Re:WinRM &amp; UserInteractive
Bonjour,

merci pour ce poste et les réponses apportées, ça m'a aidé.

[code:1][void][Reflection.Assembly]::LoadWithPartialName(\&quot;System.Windows.Forms\&quot;«»)

[Windows.Forms.MessageBox]::«»Show(\&quot;Test\&quot;, \&quot;Demo\&quot;, \&quot;OK\&quot;, \&quot;Information\&quot;, \&quot;Button1\&quot;, \&quot;ServiceNotification\&quot;«»)[/code:1]
En effet une fois une session ouverte, l'exécution de ceci ne crée pas d'erreur. Cependant rien ne s'affiche sur le poste distant !! Il s'agit d'un processus exécuté avec un autre compte que celui utilisé pour se logué sur cette machine distante... (le processus est donc bien présent)

Bref je me suis permis de continuer ce poste car j'ai vraiment besoin de trouver un moyen d'informer un utilisateur une fois que j'ai terminé avec la PSSession.

Tout aide sera la BIENVENUE.

Merci beaucoup !

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

Plus d'informations
il y a 11 ans 10 mois #11817 par Laurent Dardenne
As-tu essayé un Net Send ?
Je n'ai pas encore essayé, mais pourquoi pas :whistle:
Si j'ai le temps demain j'essaie sur une plateforme de test 2008 R2.
De mon côté, et dans le même contexte, j'ai essayé d'utiliser ceci, d'une session WinRM vers ma session de dev courante :
[code:1]
[System.Diagnostics.Debugger]::Log($level, $category, $message)
[/code:1]
mais sans succès, normal.
Cela ressemble au pb d'interaction d'un service avec le bureau, depuis Seven...
Sinon le mieux est poster sur le forum US de MS dédié à Powershell. A moins que que ce soit déjà fait.

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 10 mois #11821 par Greder
Réponse de Greder sur le sujet Re:WinRM &amp; UserInteractive
Merci pour ta réponse.

Je ne crois pas que ça soit possible en fait. Je me dirige vers une autre solution.

Malheureusement il s'agit d'un projet de fin d'étude et mon temps est vraiment limité, je ne peux plus chercher de soluce :(

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

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