Flash info

"Si vous vivez chaque jour comme si c'était le dernier, un jour vous aurez probablement raison."

Steve Jobs (1955-2011)

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
MClaveau
Utilisateur

PowerShelleur Débutant
Messages: 2
graphgraph
Karma: 0  
Problème avecun objet COM - 22/02/08 19:50 Bonsoir !

En commençant à tester PowerShell, je tombe sur un problème.
J'ai un serveur-COM puissant, que j'utilise avec beaucoup de langages. Mais, impossible d'y accéder avec PowerShell.

Voici mon code PowerShell :
Code:

  $px = New-object -ComObject Ponx.Mci $px.PVersion() L'appel de la méthode a échoué parce que [System.__ComObject] ne contient pas d e méthode nommée « PVersion ». Au niveau de ligne : 1 Caractère : 13 + $px.PVersion( <<<< )



Pour info, voici le code VBscript équivalent, qui fonctionne :
Code:

  Set px WScript.CreateObject("Ponx.Mci") WScript.echo px.PVersion()


La version Python :
Code:

  import win32com.client px win32com.client.Dispatch('Ponx.Mci') print px.PVersion()


La version JScript :
Code:

  var ponx = new ActiveXObject("Ponx.Mci"); WScript.Echo(ponx.PVersion());


Et enfin, le version en Ruby:
Code:

  require 'win32ole' ponx WIN32OLE.new('Ponx.Mci') print ponx.PVersion()



Au cas où, j'ai d'autres exemples de code, en Perl, en VBA, en C#, en RealBasic, en ObjectPAL, etc.

Toutes les versions fonctionnent, à l'exception de celle en PowerShell.

Si quelqu'un pouvait me donner une solution, et, éventuellement, une explication, je l'en remercie d'avance.

Message édité par: MClaveau, à: 22/02/08 20:54

Message édité par: MClaveau, à: 22/02/08 20:56
  | | L'administrateur a désactivé l'accés public en écriture.
MClaveau
Utilisateur

PowerShelleur Débutant
Messages: 2
graphgraph
Karma: 0  
Re:Problème avecun objet COM - 23/02/08 10:15 Bonjour !

Personne pour répondre ? Dommage.
Mais, j'ai quand même trouvé une explication, et une solution.

L'explication : PowerShell n'est pas capable d'utiliser les objets-COM non statiquement déclarés. En clair, PowerShell ne peut pas/sait pas utiliser le "late binding".

Solution (partielle) : pour contourner cette limite, j'ai eu l'idée de passer par un "pont". J'ai choisi MSScriptControl.ScriptControl et VBscript. C'est un serveur COM statique, avec une TLB, mais qui utilise, par défaut IDispatch (late binding) pour ses appels à d'autres serveurs COM.

Voici le code qui fonctionne :
Code:

  Function Test-Ponx($param "ABCD") {   $vbs = new-object -com MSScriptControl.ScriptControl   $vbs.language 'vbscript'   $VBS.ExecuteStatement('Set px = CreateObject("ponx.Mci")')   $ret $VBS.eval('px.PVersion()')   return $ret } Test-Ponx("AAAA")



OK, ce n'est pas terrible, comme démarche, et ce n'est pas complet (pas de support des serveurs COM dynamiques). Mais, c'est un début.
  | | L'administrateur a désactivé l'accés public en écriture.
© 2020 PowerShell-Scripting.com