PowerShell IE9 ComObject a tous nuls propriétés après avoir accédé à la page web
J'ai un script PowerShell qui permet d'accéder à une (sans doute) classique page ASP sur notre intranet pour arrêter un Service Windows en cours d'exécution sur notre serveur en tant que partie du processus de déploiement de ce service (et il redémarre après le déploiement de nouveaux fichiers). Il fonctionnait bien jusqu'à ce que nous avons récemment mis à niveau vers IE9. Voici le script.
# Open service page in IE
$ie = new-object -comobject InternetExplorer.Application
$ie.visible = $true
$ie.navigate($serviceUrl)
while($ie.busy) { start-sleep 1 }
# Stop service
$ie.Document.getElementById("dropDownActionList").value = "Stop"
$ie.Document.getElementById("buttonTakeAction").click()
while($ie.busy) { start-sleep 1 }
Maintenant, quand je lance le script, il lance avec succès IE, mais jette le message d'erreur suivant:
You cannot call a method on a null-valued expression.
At C:\Projects\ABC\Scripts\Deploy.ps1:85 char:28
+ $ie.Document.getElementById <<<< ("dropDownActionList").value = "Stop"
+ CategoryInfo : InvalidOperation: (getElementById:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Quand je l'ai étudier en PowerShell, je trouve que si je créer l'IE ComObject, d'abord, a des propriétés valides, mais dès que j'ai d'accéder au service de contrôle de la page, toutes les propriétés sont nuls (presque comme si l'objet com disparu?). Par exemple, avant la HWND
propriété a une valeur valide, mais maintenant c'est nul ($ie.hwnd -eq $null
renvoie la valeur true). Aucune erreur n'est affiché dans PowerShell quand j'accède à la page.
J'ai regardé quelques similaire questions, mais le premier ne correspond pas à ma situation (le Document
propriété est null dans mon cas) et que pour la dernière, IE9, par défaut le mode de compatibilité pour les sites intranet. J'ai enregistré la page ASP et il a couru à travers la le validateur du w3c et l'a jeté à quelques erreurs (bien qu'aucun liés à des éléments que je suis en train de traiter). Malheureusement je ne peux pas corriger ces. D'autres sites ne semblent pas avoir ce problème. Les soupçons sur ce que le problème peut être et des recommandations sur les solutions de rechange?
Vous devez vous connecter pour publier un commentaire.
J'ai travaillé par le biais de ce.. en quelque sorte. J'ai été voir le même comportement jusqu'à ce que j'ai désactivé le mode protégé dans internet explorer. Cela semble avoir quelque chose à voir avec la soumission d'une zone de sécurité à l'autre. Donc.. en supposant que votre page d'origine est dans la zone internet, mode protégé est activé, vous vous soumettez à une page dans une zone de confiance ou à un intranet ou que ce soit, il semble que la COM contexte est perdu. Probablement intentionnelle. Je vais essayer de corriger les zones, et en gardant le mode protégé sur.
Espère que cette aide.
EDIT: C'est aussi un non-problème si vous exécutez votre powershell en mode élevé (exécuter en tant qu'admin)
En outre:
http://msdn.microsoft.com/en-us/library/bb625962.aspx
Ce problème est causé par des niveaux d'intégrité depuis Internet Explorer 8.
C'est aussi la raison pour laquelle l'application s'exécute bien en tant qu'administrateur.
Depuis IE-8 fonctionne en "bas de l'intégrité" mode, il n'est pas possible d'automatiser c'est à dire de l'intérieur d'un script. C'est parce que le script s'exécute en tant qu'utilisateur qui appartient à la "moyenne de l'intégrité" de mode. La conception de la sécurité est telle qu'elle peut envoyer des instructions allant de moyen à faible intégrité, mais ne peut pas recevoir des données de faible à moyenne intégrité.
Mise à jour: Voici un exemple de comment le faire sans modifier les paramètres. Il sera de retour le perdu com-Objet.
$objIE
après le Script, j'obtiens le bon Objet.