Avec PowerShell, si on veut utiliser Internet-Explorer par COM, on peut
utiliser :
$ie=(New-Object -com 'InternetExplorer.Application')
Ce que je voudrais, c'est connecter à une instance Internet-Explorer
déjà ouverte.
Avec Python, il suffit de faire
win32com.client.Dispatch('{9BA05972-F6A8-11CF-A442-00A0C90A8F39}')
pour récupérer une liste des handles COM des instances ouvertes.
J'ai essayé un autre truc, qui n'a pas marché non plus :
- création d'un <div id="TTT"> (dans la page HTML)
- connexion : var o=document.getElementById('TTT'); (en jscript, au chargement de la page)
- affectation de l'objet Window comme propriété de l'objet o : o.WIN=self; (jscript)
- sous PowerShell, connection à l'objet : $t = $ie.Document.getElementById("TTT") (après avoir ouvert IE, dans $ie)
- vérification : echo $t.outerHTML ; jusque là, c'est bon, on voit bien le HTML
- connection à la propriété : $w = $t.WIN Mais, là, ça ne marche plus ! l'objet $w reste désespérement vide.
J'ai une autre idée, mais j'ai peur que cela ne marche pas...
Méta-MCI
Re !
Dernier essai : encore un échec.
J'ai créé une propriété à un objet DIV ; à cette propriété, j'ai affecté l'objet window. J'ai aussi créé une fonction de contrôle (en javascript), pour lancer une fonction d'affichage de cette propriété (de window, donc).
Ensuite, côté power-shell, si j'appelle la fonction de contrôle directement : $ie.Navigate(" javascript: ctrl();") ça fonctionne (donc tout est en place) Mais, si on peut bien se connecter à l'objet DIV, impossible d'adresser la propriété... J'ai l'impression que PS bloque toute connexion, via IE (seulement), à un objet de type COM, inclus dans un autre objet.
Dur ! Dur !
Re !
Dernier essai : encore un échec.
J'ai créé une propriété à un objet DIV ; à cette propriété, j'ai affecté
l'objet window.
J'ai aussi créé une fonction de contrôle (en javascript), pour lancer une
fonction d'affichage de cette propriété (de window, donc).
Ensuite, côté power-shell, si j'appelle la fonction de contrôle directement
: $ie.Navigate(" javascript: ctrl();") ça fonctionne (donc tout est en
place)
Mais, si on peut bien se connecter à l'objet DIV, impossible d'adresser la
propriété... J'ai l'impression que PS bloque toute connexion, via IE
(seulement), à un objet de type COM, inclus dans un autre objet.
J'ai créé une propriété à un objet DIV ; à cette propriété, j'ai affecté l'objet window. J'ai aussi créé une fonction de contrôle (en javascript), pour lancer une fonction d'affichage de cette propriété (de window, donc).
Ensuite, côté power-shell, si j'appelle la fonction de contrôle directement : $ie.Navigate(" javascript: ctrl();") ça fonctionne (donc tout est en place) Mais, si on peut bien se connecter à l'objet DIV, impossible d'adresser la propriété... J'ai l'impression que PS bloque toute connexion, via IE (seulement), à un objet de type COM, inclus dans un autre objet.
Dur ! Dur !
Jacques Barathon [MS]
"Méta-MCI" wrote in message news:eBSlK$
Re !
Dernier essai : encore un échec.
J'ai créé une propriété à un objet DIV ; à cette propriété, j'ai affecté l'objet window. J'ai aussi créé une fonction de contrôle (en javascript), pour lancer une fonction d'affichage de cette propriété (de window, donc).
Ensuite, côté power-shell, si j'appelle la fonction de contrôle directement : $ie.Navigate(" javascript: ctrl();") ça fonctionne (donc tout est en place) Mais, si on peut bien se connecter à l'objet DIV, impossible d'adresser la propriété... J'ai l'impression que PS bloque toute connexion, via IE (seulement), à un objet de type COM, inclus dans un autre objet.
Je n'ai jamais pratiqué le pilotage d'IE par script, je ne peux donc pas t'aider, mais ton retour d'expérience est intéressant. Il faudrait voir avec l'équipe PowerShell s'il s'agit d'un bug (ça en a l'air mais encore faut-il pouvoir le qualifier correctement). Peux-tu soumettre ton problème sur le forum US? Dis-moi si tu as besoin d'aide sur une mise en forme en anglais.
Jacques
"Méta-MCI" <enleverlesX.XmcX@XmclaveauX.com> wrote in message
news:eBSlK$ehHHA.4516@TK2MSFTNGP03.phx.gbl...
Re !
Dernier essai : encore un échec.
J'ai créé une propriété à un objet DIV ; à cette propriété, j'ai affecté
l'objet window.
J'ai aussi créé une fonction de contrôle (en javascript), pour lancer une
fonction d'affichage de cette propriété (de window, donc).
Ensuite, côté power-shell, si j'appelle la fonction de contrôle
directement : $ie.Navigate(" javascript: ctrl();") ça fonctionne (donc
tout est en place)
Mais, si on peut bien se connecter à l'objet DIV, impossible d'adresser la
propriété... J'ai l'impression que PS bloque toute connexion, via IE
(seulement), à un objet de type COM, inclus dans un autre objet.
Je n'ai jamais pratiqué le pilotage d'IE par script, je ne peux donc pas
t'aider, mais ton retour d'expérience est intéressant. Il faudrait voir avec
l'équipe PowerShell s'il s'agit d'un bug (ça en a l'air mais encore faut-il
pouvoir le qualifier correctement). Peux-tu soumettre ton problème sur le
forum US? Dis-moi si tu as besoin d'aide sur une mise en forme en anglais.
J'ai créé une propriété à un objet DIV ; à cette propriété, j'ai affecté l'objet window. J'ai aussi créé une fonction de contrôle (en javascript), pour lancer une fonction d'affichage de cette propriété (de window, donc).
Ensuite, côté power-shell, si j'appelle la fonction de contrôle directement : $ie.Navigate(" javascript: ctrl();") ça fonctionne (donc tout est en place) Mais, si on peut bien se connecter à l'objet DIV, impossible d'adresser la propriété... J'ai l'impression que PS bloque toute connexion, via IE (seulement), à un objet de type COM, inclus dans un autre objet.
Je n'ai jamais pratiqué le pilotage d'IE par script, je ne peux donc pas t'aider, mais ton retour d'expérience est intéressant. Il faudrait voir avec l'équipe PowerShell s'il s'agit d'un bug (ça en a l'air mais encore faut-il pouvoir le qualifier correctement). Peux-tu soumettre ton problème sur le forum US? Dis-moi si tu as besoin d'aide sur une mise en forme en anglais.
$IE.document.IHTMLDocument2_get_parentWindow() ou $IE.document.get_parentWindow()
----------> « Le cast spécifié n'est pas valide. »
J'ai déjà essayé différentes choses sans succès (jusqu'à présent :-) ?) .
Amicalement,
-- Jean - JMST Belgium
Jean
document.parentWindow n'est pas récupéré.
Une *demi-solution* (je l'aurais bien mis en majuscules).
En utilisant l'objet ScriptControl qui, sauf erreur de ma part est installé par défaut sous tout les OS capables de faire tourner PowerShell.
J'ai choisi JScript comme language parcequ'il est plus agréable pour manipuler le DOM et que j'ai besoin par la suite d'un eval (en VBScript il faudrait faire des distinctions d'utilisation d'Eval et d'Execute(Global)). Pour Michel : Python ne serait pas exclu :-)
Dans les 2 exemples qui suivent on suppose qu'une fenêtre IE nommée "BOND" a été ouverte.
Un premier exemple qui récupère directement le document d'une fenêtre IE nommée dans PowerShell :
#---8<---.PS1---Jean-JMST-Belgium--- # On suppose qu'une fenêtre IE # nommée BOND est ouverte
$nom_fenetre="BOND"
# Création et définition du ScriptControl $SC=New-Object -com ScriptControl $SC.Language='JScript' $code 'function IE_Document(nom){'+ ' with(new ActiveXObject("InternetExplorer.Application")){'+ ' navigate("about:blank");'+ ' while(busy){void true};'+ ' return document.parentWindow.open("",nom).document'+ ' }'+ '}' $SC.AddCode($code) $script=$SC.CodeObject # récupère le document de la fenêtre dans $iedoc $iedoc=$script.IE_Document($nom_fenetre) # Crée une balise <b> $btag=$iedoc.body.appendChild($iedoc.createElement('b')) # modifie le contenu de la balise $btag.innerText='My name is Bond, James Bond' $iedoc.body.innerHTML+='<br />' # Crée une balise <i> $itag=$iedoc.body.appendChild($iedoc.createElement('i')) # Affiche une horloge pendant 1 minute dans la balise # ... c'est James Bond quand même ... 0..59|%{ if($_%2 -eq 0) {$itag.style.backgroundColor='yellow'} else {$itag.style.backgroundColor='lemonchiffon'} $itag.innerText=Get-Date Start-Sleep 1 } # Affiche le contenu texte de la balise <body> $iedoc.body.innerText #---8<---.PS1---Jean-JMST-Belgium---
Second exemple qui permet par exemple d'accéder à l'objet window de la fenêtre IE nommée :
#---8<---.PS1---Jean-JMST-Belgium--- # On suppose qu'une fenêtre IE # nommée $nom_fenetre est ouverte
$nom_fenetre="BOND"
$SC=New-Object -com ScriptControl $SC.Language='JScript' $code 'function Acceder_IE(nom,quoi){'+ ' with(new ActiveXObject("InternetExplorer.Application")){'+ ' navigate("about:blank");'+ ' while(busy){void true};'+ ' with(document.parentWindow.open("",nom)){'+ ' var r=eval(quoi)'+ ' };'+ ' quit()'+ ' };'+ ' return r'+ '}' $SC.AddCode($code) $script=$SC.CodeObject $iedoc=$script.Acceder_IE( $nom_fenetre, 'document' ) $btag=$iedoc.body.appendChild($iedoc.createElement('b')) $btag.innerText="Bond dit : CLIQUEZ !" #ajoute un événement onclick sur <body> $script.Acceder_IE( $nom_fenetre, 'document.body.onclick=function(){this.style.backgroundColor="red"}' ) # Affiche la propriété screenLeft de # l'objet window dans PowerShell $script.Acceder_IE( $nom_fenetre, 'screenLeft' ) #Affiche un message dans la fenêtre $script.Acceder_IE( $nom_fenetre, 'alert("Bien le bonjour de PowerShell")' )
#---8<---.PS1---Jean-JMST-Belgium---
... il n'empêche, les recherches continuent ... une fois ... :-)
Amicalement,
-- Jean - JMST Belgium
document.parentWindow n'est pas récupéré.
Une *demi-solution* (je l'aurais bien mis en majuscules).
En utilisant l'objet ScriptControl qui, sauf erreur de ma part est
installé par défaut sous tout les OS capables de faire tourner
PowerShell.
J'ai choisi JScript comme language parcequ'il est plus agréable pour
manipuler le DOM et que j'ai besoin par la suite d'un eval (en VBScript
il faudrait faire des distinctions d'utilisation d'Eval et
d'Execute(Global)).
Pour Michel : Python ne serait pas exclu :-)
Dans les 2 exemples qui suivent on suppose qu'une fenêtre IE nommée
"BOND" a été ouverte.
Un premier exemple qui récupère directement le document d'une fenêtre
IE nommée dans PowerShell :
#---8<---.PS1---Jean-JMST-Belgium---
# On suppose qu'une fenêtre IE
# nommée BOND est ouverte
$nom_fenetre="BOND"
# Création et définition du ScriptControl
$SC=New-Object -com ScriptControl
$SC.Language='JScript'
$code 'function IE_Document(nom){'+
' with(new ActiveXObject("InternetExplorer.Application")){'+
' navigate("about:blank");'+
' while(busy){void true};'+
' return document.parentWindow.open("",nom).document'+
' }'+
'}'
$SC.AddCode($code)
$script=$SC.CodeObject
# récupère le document de la fenêtre dans $iedoc
$iedoc=$script.IE_Document($nom_fenetre)
# Crée une balise <b>
$btag=$iedoc.body.appendChild($iedoc.createElement('b'))
# modifie le contenu de la balise
$btag.innerText='My name is Bond, James Bond'
$iedoc.body.innerHTML+='<br />'
# Crée une balise <i>
$itag=$iedoc.body.appendChild($iedoc.createElement('i'))
# Affiche une horloge pendant 1 minute dans la balise
# ... c'est James Bond quand même ...
0..59|%{
if($_%2 -eq 0)
{$itag.style.backgroundColor='yellow'}
else
{$itag.style.backgroundColor='lemonchiffon'}
$itag.innerText=Get-Date
Start-Sleep 1
}
# Affiche le contenu texte de la balise <body>
$iedoc.body.innerText
#---8<---.PS1---Jean-JMST-Belgium---
Second exemple qui permet par exemple d'accéder à l'objet window de la
fenêtre IE nommée :
#---8<---.PS1---Jean-JMST-Belgium---
# On suppose qu'une fenêtre IE
# nommée $nom_fenetre est ouverte
$nom_fenetre="BOND"
$SC=New-Object -com ScriptControl
$SC.Language='JScript'
$code 'function Acceder_IE(nom,quoi){'+
' with(new ActiveXObject("InternetExplorer.Application")){'+
' navigate("about:blank");'+
' while(busy){void true};'+
' with(document.parentWindow.open("",nom)){'+
' var r=eval(quoi)'+
' };'+
' quit()'+
' };'+
' return r'+
'}'
$SC.AddCode($code)
$script=$SC.CodeObject
$iedoc=$script.Acceder_IE(
$nom_fenetre,
'document'
)
$btag=$iedoc.body.appendChild($iedoc.createElement('b'))
$btag.innerText="Bond dit : CLIQUEZ !"
#ajoute un événement onclick sur <body>
$script.Acceder_IE(
$nom_fenetre,
'document.body.onclick=function(){this.style.backgroundColor="red"}'
)
# Affiche la propriété screenLeft de
# l'objet window dans PowerShell
$script.Acceder_IE(
$nom_fenetre,
'screenLeft'
)
#Affiche un message dans la fenêtre
$script.Acceder_IE(
$nom_fenetre,
'alert("Bien le bonjour de PowerShell")'
)
#---8<---.PS1---Jean-JMST-Belgium---
... il n'empêche, les recherches continuent ... une fois ... :-)
Une *demi-solution* (je l'aurais bien mis en majuscules).
En utilisant l'objet ScriptControl qui, sauf erreur de ma part est installé par défaut sous tout les OS capables de faire tourner PowerShell.
J'ai choisi JScript comme language parcequ'il est plus agréable pour manipuler le DOM et que j'ai besoin par la suite d'un eval (en VBScript il faudrait faire des distinctions d'utilisation d'Eval et d'Execute(Global)). Pour Michel : Python ne serait pas exclu :-)
Dans les 2 exemples qui suivent on suppose qu'une fenêtre IE nommée "BOND" a été ouverte.
Un premier exemple qui récupère directement le document d'une fenêtre IE nommée dans PowerShell :
#---8<---.PS1---Jean-JMST-Belgium--- # On suppose qu'une fenêtre IE # nommée BOND est ouverte
$nom_fenetre="BOND"
# Création et définition du ScriptControl $SC=New-Object -com ScriptControl $SC.Language='JScript' $code 'function IE_Document(nom){'+ ' with(new ActiveXObject("InternetExplorer.Application")){'+ ' navigate("about:blank");'+ ' while(busy){void true};'+ ' return document.parentWindow.open("",nom).document'+ ' }'+ '}' $SC.AddCode($code) $script=$SC.CodeObject # récupère le document de la fenêtre dans $iedoc $iedoc=$script.IE_Document($nom_fenetre) # Crée une balise <b> $btag=$iedoc.body.appendChild($iedoc.createElement('b')) # modifie le contenu de la balise $btag.innerText='My name is Bond, James Bond' $iedoc.body.innerHTML+='<br />' # Crée une balise <i> $itag=$iedoc.body.appendChild($iedoc.createElement('i')) # Affiche une horloge pendant 1 minute dans la balise # ... c'est James Bond quand même ... 0..59|%{ if($_%2 -eq 0) {$itag.style.backgroundColor='yellow'} else {$itag.style.backgroundColor='lemonchiffon'} $itag.innerText=Get-Date Start-Sleep 1 } # Affiche le contenu texte de la balise <body> $iedoc.body.innerText #---8<---.PS1---Jean-JMST-Belgium---
Second exemple qui permet par exemple d'accéder à l'objet window de la fenêtre IE nommée :
#---8<---.PS1---Jean-JMST-Belgium--- # On suppose qu'une fenêtre IE # nommée $nom_fenetre est ouverte
$nom_fenetre="BOND"
$SC=New-Object -com ScriptControl $SC.Language='JScript' $code 'function Acceder_IE(nom,quoi){'+ ' with(new ActiveXObject("InternetExplorer.Application")){'+ ' navigate("about:blank");'+ ' while(busy){void true};'+ ' with(document.parentWindow.open("",nom)){'+ ' var r=eval(quoi)'+ ' };'+ ' quit()'+ ' };'+ ' return r'+ '}' $SC.AddCode($code) $script=$SC.CodeObject $iedoc=$script.Acceder_IE( $nom_fenetre, 'document' ) $btag=$iedoc.body.appendChild($iedoc.createElement('b')) $btag.innerText="Bond dit : CLIQUEZ !" #ajoute un événement onclick sur <body> $script.Acceder_IE( $nom_fenetre, 'document.body.onclick=function(){this.style.backgroundColor="red"}' ) # Affiche la propriété screenLeft de # l'objet window dans PowerShell $script.Acceder_IE( $nom_fenetre, 'screenLeft' ) #Affiche un message dans la fenêtre $script.Acceder_IE( $nom_fenetre, 'alert("Bien le bonjour de PowerShell")' )
#---8<---.PS1---Jean-JMST-Belgium---
... il n'empêche, les recherches continuent ... une fois ... :-)
# Ferme la fenêtre après 5 secondes #Start-Sleep 5 #$IE.Quit() #---8<---.PS1---Jean-JMST-Belgium---
Amicalement,
-- Jean - JMST Belgium
Jean
Une *demi-solution*
Pour finir avec cette voie, en prenant un shaker, un peu de sulfite et en secouant bien, un script PS :
#---8<---New-IENamed.ps1---Jean-JMST-Belgium--- #=4/2007==================================Version 0=====# #== Creates or gets an Internet Explorer named window ==# # # PARMETERS # $name : name of the window to create or to get # $code (string containing JScript code): # If not present a new window named $name is created. # An InternetExplorer.Application object is returned. # If present get the IE window named $name and executes # JScript code. # Result of JScript code is returned. # # EXAMPLES # # Create an new IE window named CHARLIE, write CHAPLIN # in it's document and close after 15 seconds: # $ie=.New-IENamed 'CHARLIE' # $ie.visible=$true # $ie.document.body.innerText='CHAPLIN' # Start-Sleep 15 # $ie.Quit() # # Get an IE window named CHARLIE and : # -output the screenLeft property # .New-IENamed 'CHARLIE' 'screenLeft' # # -retrieve the document object, write CHAPLIN # ,change body background color and set an # onclick event on the body # $iedoc=.New-IENamed 'CHARLIE' 'document' # $iedoc.IHTMLDocument2_write('CHAPLIN') # $iedoc.body.style.backgroundColor='tomato' # .New-IENamed 'CHARLIE' 'document.body.onclick # function(){alert("CHAPLIN")}' # # -show a dialog box saying CHAPLIN # .New-IENamed 'CHARLIE' 'alert("CHAPLIN")' # #=========Tested on PowerShell 1========================#
Pour finir avec cette voie, en prenant un shaker, un peu de sulfite et
en secouant bien, un script PS :
#---8<---New-IENamed.ps1---Jean-JMST-Belgium---
#=4/2007==================================Version 0=====#
#== Creates or gets an Internet Explorer named window ==#
#
# PARMETERS
# $name : name of the window to create or to get
# $code (string containing JScript code):
# If not present a new window named $name is created.
# An InternetExplorer.Application object is returned.
# If present get the IE window named $name and executes
# JScript code.
# Result of JScript code is returned.
#
# EXAMPLES
#
# Create an new IE window named CHARLIE, write CHAPLIN
# in it's document and close after 15 seconds:
# $ie=.New-IENamed 'CHARLIE'
# $ie.visible=$true
# $ie.document.body.innerText='CHAPLIN'
# Start-Sleep 15
# $ie.Quit()
#
# Get an IE window named CHARLIE and :
# -output the screenLeft property
# .New-IENamed 'CHARLIE' 'screenLeft'
#
# -retrieve the document object, write CHAPLIN
# ,change body background color and set an
# onclick event on the body
# $iedoc=.New-IENamed 'CHARLIE' 'document'
# $iedoc.IHTMLDocument2_write('CHAPLIN')
# $iedoc.body.style.backgroundColor='tomato'
# .New-IENamed 'CHARLIE' 'document.body.onclick # function(){alert("CHAPLIN")}'
#
# -show a dialog box saying CHAPLIN
# .New-IENamed 'CHARLIE' 'alert("CHAPLIN")'
#
#=========Tested on PowerShell 1========================#
Pour finir avec cette voie, en prenant un shaker, un peu de sulfite et en secouant bien, un script PS :
#---8<---New-IENamed.ps1---Jean-JMST-Belgium--- #=4/2007==================================Version 0=====# #== Creates or gets an Internet Explorer named window ==# # # PARMETERS # $name : name of the window to create or to get # $code (string containing JScript code): # If not present a new window named $name is created. # An InternetExplorer.Application object is returned. # If present get the IE window named $name and executes # JScript code. # Result of JScript code is returned. # # EXAMPLES # # Create an new IE window named CHARLIE, write CHAPLIN # in it's document and close after 15 seconds: # $ie=.New-IENamed 'CHARLIE' # $ie.visible=$true # $ie.document.body.innerText='CHAPLIN' # Start-Sleep 15 # $ie.Quit() # # Get an IE window named CHARLIE and : # -output the screenLeft property # .New-IENamed 'CHARLIE' 'screenLeft' # # -retrieve the document object, write CHAPLIN # ,change body background color and set an # onclick event on the body # $iedoc=.New-IENamed 'CHARLIE' 'document' # $iedoc.IHTMLDocument2_write('CHAPLIN') # $iedoc.body.style.backgroundColor='tomato' # .New-IENamed 'CHARLIE' 'document.body.onclick # function(){alert("CHAPLIN")}' # # -show a dialog box saying CHAPLIN # .New-IENamed 'CHARLIE' 'alert("CHAPLIN")' # #=========Tested on PowerShell 1========================#
Je n'ai pas testé les deux derniers scripts. Mais j'ai mis en évidence un truc intéressant.
A partir d'une fichier .HTML, contenant un peu de JScript, qui ouvre un ActiveX (dans la variable oax), et la fonction suivante : function tst(){ alert(window.name); //ligne_0 //alert(oax.test()); //ligne_A }
D'une manière très similaire à vous, je crée une fonction "foo" en JScript, qui ouvre IE, navigue sur le fichier .HTML, et lance tst().
Et ça fonctionne.
Normal(ement).
MAIS, si, dans le fichier .HTML, on enlève le commentaire de ligne_A, ça ne marche plus.
On obtient ça :
Exception lors de l'appel de « Eval » avec « 1 » argument(s) : « Exception de HRESULT : 0x80020101 » Au niveau de ligne : 1 Caractère : 9 + $SC.eval( <<<< "foo('AZER')")
De plus, ce message d'erreur apparaît APRES l'affichage de la ligne_0 Si l'on attend 10 minutes avant de cliquer sur le [OK] de la boîte de dialogue, le message d'erreur attendra.
Si on remet le commentaire, ça remarche !!!!!!!!!!!!
Le même fichier HTML + tst() fonctionne parfaitement, avec le même code ScriptControl.JScript, s'il est appelé via un script Python.
Conclusion : Power-Shell bloque toute utilisation de fonctions COM/ActiveX. AMHA, la paranoïa sécuritaire est devenue pandémique ;o)))
Pour m'amuser, je vais essayé avec un setTimeout, qui appelerait la même fonction COM, une fois la main rendue à PowerShell...
-- @-salutations
Michel Claveau
Bonsoir !
Je n'ai pas testé les deux derniers scripts.
Mais j'ai mis en évidence un truc intéressant.
A partir d'une fichier .HTML, contenant un peu de JScript, qui ouvre un
ActiveX (dans la variable oax), et la fonction suivante :
function tst(){
alert(window.name); //ligne_0
//alert(oax.test()); //ligne_A
}
D'une manière très similaire à vous, je crée une fonction "foo" en
JScript, qui ouvre IE, navigue sur le fichier .HTML, et lance tst().
Et ça fonctionne.
Normal(ement).
MAIS, si, dans le fichier .HTML, on enlève le commentaire de ligne_A,
ça ne marche plus.
On obtient ça :
Exception lors de l'appel de « Eval » avec « 1 » argument(s) :
« Exception de HRESULT : 0x80020101 »
Au niveau de ligne : 1 Caractère : 9
+ $SC.eval( <<<< "foo('AZER')")
De plus, ce message d'erreur apparaît APRES l'affichage de la ligne_0
Si l'on attend 10 minutes avant de cliquer sur le [OK] de la boîte de
dialogue, le message d'erreur attendra.
Si on remet le commentaire, ça remarche !!!!!!!!!!!!
Le même fichier HTML + tst() fonctionne parfaitement, avec le même code
ScriptControl.JScript, s'il est appelé via un script Python.
Conclusion : Power-Shell bloque toute utilisation de fonctions
COM/ActiveX.
AMHA, la paranoïa sécuritaire est devenue pandémique ;o)))
Pour m'amuser, je vais essayé avec un setTimeout, qui appelerait la
même fonction COM, une fois la main rendue à PowerShell...
Je n'ai pas testé les deux derniers scripts. Mais j'ai mis en évidence un truc intéressant.
A partir d'une fichier .HTML, contenant un peu de JScript, qui ouvre un ActiveX (dans la variable oax), et la fonction suivante : function tst(){ alert(window.name); //ligne_0 //alert(oax.test()); //ligne_A }
D'une manière très similaire à vous, je crée une fonction "foo" en JScript, qui ouvre IE, navigue sur le fichier .HTML, et lance tst().
Et ça fonctionne.
Normal(ement).
MAIS, si, dans le fichier .HTML, on enlève le commentaire de ligne_A, ça ne marche plus.
On obtient ça :
Exception lors de l'appel de « Eval » avec « 1 » argument(s) : « Exception de HRESULT : 0x80020101 » Au niveau de ligne : 1 Caractère : 9 + $SC.eval( <<<< "foo('AZER')")
De plus, ce message d'erreur apparaît APRES l'affichage de la ligne_0 Si l'on attend 10 minutes avant de cliquer sur le [OK] de la boîte de dialogue, le message d'erreur attendra.
Si on remet le commentaire, ça remarche !!!!!!!!!!!!
Le même fichier HTML + tst() fonctionne parfaitement, avec le même code ScriptControl.JScript, s'il est appelé via un script Python.
Conclusion : Power-Shell bloque toute utilisation de fonctions COM/ActiveX. AMHA, la paranoïa sécuritaire est devenue pandémique ;o)))
Pour m'amuser, je vais essayé avec un setTimeout, qui appelerait la même fonction COM, une fois la main rendue à PowerShell...