none
IE9 via PowerShell fernsteuern RRS feed

  • Frage

  • Hallo,

    ich hab ein PS Skript geschrieben, welches sich mittels einer IE Instanz an einer Website anmeldet, und verschiedene Daten von dieser ausließt. Dieses funktioniert auch, wenn ich das Skript unter einem Windows User ausführe. Starte ich das Skript aber als Scheduled Task unter dem SYSTEM Account, bekomme ich immer folgenden Fehler:

    System.Management.Automation.RuntimeException: Die value-Eigenschaft wurde in diesem Objekt nicht gefunden. Stellen Sie sicher, dass sie vorhanden ist und festgelegt werden kann.

       bei System.Management.Automation.PropertyReferenceNode.SetValue(PSObject obj, Object property, Object value, ExecutionContext context)

       bei System.Management.Automation.AssignablePropertyReference.SetValue(Object value, ExecutionContext context)

       bei System.Management.Automation.AssignmentStatementNode.Execute(Array input, Pipe outputPipe, ExecutionContext context)

       bei System.Management.Automation.StatementListNode.ExecuteStatement(ParseTreeNode statement, Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)

    Das Skript muss unter dem SYSTEM Konto laufen können, da es später von einem System Dienst getriggert wird, der ebenfalls unter dem SYSTEM Konto läuft.

    try
    {  
    $UrlRoot = "https://ourhomepage/subpage/"
    $ie = new-object -com "InternetExplorer.Application"
      
    $ie.visible = $false
    
    #Navigate to login page 
    $ie.navigate($UrlRoot + "login.php")
    
        
    while ($ie.Busy -eq $true)
          {
            Start-Sleep -Milliseconds 500;
          }
    
    #Perform login
    $ie.document.getElementById("loginname").value = "login"
    $ie.document.getElementById("passwort").value = "password"
    $ie.document.getElementById("submit").click()
    
    #Wait for server response
    Start-Sleep -Milliseconds 4000;
    
    …
    …
    
    Finally
     {
    $ie.navigate($UrlRoot + "logout.php?")
     Start-Sleep -Milliseconds 500;
    }#Finally

    Noch eine kleine Anmerkung:  Unter Windows 7 funktioniert das Skript auch unter dem SYSTEM Konto. Das geschilderte Problem tritt auf einem Windows Server 2008 R2. Auf diesem soll das Skript aber später auch laufen...

    Alex


    Best regards, Alexander Zirbes

    Mittwoch, 4. Juli 2012 06:22

Antworten

Alle Antworten

  • Zuerst einmal kann ich von der Automation vom Internet Explorer nur abraten, da das auf Dauer schief gehen muss. Ein Sicherheitsupdate oder ein IE Update und du fängst von vorne an!
    (Eigene Erfahrung)

    Außerdem muss man sich mal überlegen das sicherheitstechnisch von niemanden gewollt sein kann das Irgendwelche Programme (auch die PowerShell) den IE fernsteuern. Deshalb legt da Microsoft die Sicherheitslatte immer höher! Das was PowerShell mit dem IE machen kann, dass kann dann auch jedes Schadprogramm!!!!

    Das der Systemuser nicht den IE benutzen darf das liegt wahrscheinlich an dem Protected Mode.

    Bei uns ist der IE auf allen Servern abgeschaltet und das ist auch gut so! Ein Server der in das Internet gehen darf ist schon sehr gefährdet!
    Zusätzlich  müsstest du den Protected Mode abschalten und dann wird’s für deine Server immer dünner mit der Sicherheit!

    http://msdn.microsoft.com/en-us/library/bb250462(v=vs.85).aspx

    Die Internet suche ist dein freund !!!
    http://stackoverflow.com/questions/7236247/ie-protected-mode-for-local-system-account

    Alternativ kannst du auch versuchen mit den.NET Klassen Net.WebRequest oder Net.WebClient zu arbeiten:
    http://learn-powershell.net/2011/02/11/using-powershell-to-query-web-site-information/

    Ausserdem solltes du anstatt ie.navigate ie.navigate2 nehmen (auch ein sicherheits feature das nachgerüstet wurde!):
    http://social.technet.microsoft.com/Forums/de-DE/powershell_de/thread/a1cc617c-f6bc-429f-8c9d-88852f934992


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '



    Mittwoch, 4. Juli 2012 06:52
  • Bitte poste in Zukunft deine Anfrage nicht gleichzeitig in mehreren Technet/MSDN-Foren, solche Crossposts werden sonst kommentarlos gelöscht.

    Was deine Frage betrifft, hat Peter recht: sofern es hier nicht um lokales Intranet geht, ist der System Account der ungeeignetste Account um aufs Web zuzugreifen, da er zu den höchstprivilegierten Konten gehört. Nebenbei würde ein anderer Account auch gleich dein Ausführungsproblem lösen.

    Die IE-Automation würde ich hingegen nicht so komplett verteufeln. Auf einem entsprechend abgesicherten System in der DMZ, ist das nicht gefählicher als einen Webserver zu installieren.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Mittwoch, 4. Juli 2012 10:39
    Moderator
  • @Denniver
    Ein system in der DMZ muss abgesichert sein und sollte unproblematisch sein. Zumal dort die Internetanbindung feingranular geregelt sein muss(whitelist Firewall, Proxy, IPcop usw.).
    Wenn man hier im Forum aber "nur" Server sagt, dann denke ich auch Server!
    Zumal man immer wieder mitbekommt, das Computer-Laien plötzlich zu Administratoren ernannt werden. (womit ich nicht unbedingt den OP meine ;-))

    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    Donnerstag, 5. Juli 2012 05:47
  • Montag, 9. Juli 2012 07:39
  • Hallo Peter,

    danke für Deine Antwort.

    Der Server steht natürlich in einer DMZ und ist von "außen" auch nicht erreichbar, insofern mal keine Panik. Wenn MS es als best practice ansehen würde, den IE auf einem Server abzuschalten, hätten die das schon gemacht ;)

    Aus Zeitgründen, kann ich es leider gerade nicht weiter verifizieren, ob das eine mögliche Lösung ist. Melde mich sobald ich das getestet habe.

     


    Best regards, Alexander Zirbes

    Dienstag, 10. Juli 2012 10:30