2016-08-25 3 views
0

Ich schreibe einige ziemlich einfache Skripte in PowerShell 32-Bit und sie funktionieren gut.Powershell-Skripte funktionieren nicht mit Jenkins-Plugin unter Windows

Zum Beispiel möchte ich Internet Explorer zu einer Webseite öffnen und mit der Eingabe von Schlüsseln beginnen. Der folgende Code funktioniert einwandfrei, wenn ich ihn in Powershell ISE ausführe.

Add-Type –AssemblyName System.Windows.Forms 
$url = "http://WebAddress" 
$ie = New-Object -com "InternetExplorer.Application" 
$ie.Navigate($url) 

sleep 30 

[System.Windows.Forms.SendKeys]::SendWait("{2}{tab}{H}{E}{L}{L}{O}") 

Ich habe ein Windows PowerShell plugin heruntergeladen und haben den gleichen Code durchgeführt und erhielt die folgenden Fehler:

Building on master in workspace C:\Program Files\Jenkins\workspace\Jenkins Test 
[Jenkins Test] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'C:\WINDOWS\TEMP\hudson257018662776252417.ps1'" 
New-Object : Creating an instance of the COM component with CLSID {0002DF01-000 
0-0000-C000-000000000046} from the IClassFactory failed due to the following er 
ror: 80004005. 
At C:\WINDOWS\TEMP\hudson257018662776252417.ps1:4 char:17 
+ $ie = New-Object <<<< -com "InternetExplorer.Application" 
    + CategoryInfo   : ResourceUnavailable: (:) [New-Object], COMExcept 
    ion 
    + FullyQualifiedErrorId : NoCOMClassIdentified,Microsoft.PowerShell.Comman 
    ds.NewObjectCommand 

You cannot call a method on a null-valued expression. 
At C:\WINDOWS\TEMP\hudson257018662776252417.ps1:5 char:13 
+ $ie.Navigate <<<< ($url) 
    + CategoryInfo   : InvalidOperation: (Navigate:String) [], RuntimeE 
    xception 
    + FullyQualifiedErrorId : InvokeMethodOnNull 


Exception calling "SendWait" with "1" argument(s): "Access is denied" 
At C:\WINDOWS\TEMP\hudson257018662776252417.ps1:9 char:42 
+ [System.Windows.Forms.SendKeys]::SendWait <<<< ("{2}{tab}{H}{E}{L}{L}{O}") 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : DotNetMethodException 

Gibt es einen Grund, warum mein Code nicht durch Jenkins arbeiten, wie es in Powershell tut ? Ich habe ein paar einfache Echoskripten ausprobiert, die gut funktionierten, aber komplizierter und es wurde ein Fehler ausgegeben.

+0

Möglicherweise sind Abhängigkeiten auf Ihrem Build-Server vorhanden, die diese Fehler verursachen. –

+0

Welchen Benutzer verwenden Sie zum Ausführen des jenkins-Agenten? Fehlende Berechtigungen können zu Problemen führen. COM-Objekte haben auch andere Berechtigungen zugeordnet. – JamesD

+0

Könnten Sie näher auf diesen Anthony eingehen? Ich bin ein bisschen neu für Jenkins und wie man anfängt, die Situation zu verbessern. – LeChuck

Antwort

0

Sie müssen möglicherweise einmal Ausführungsrichtlinie setzen: https://technet.microsoft.com/library/hh849812.aspx

Set-ExecutionPolicy Unrestricted 

Run Powershell als Administrator und den Befehl auszuführen. Es kann Sicherheitsbedenken geben mit Unrestricted. Aber wenn es funktioniert, lesen Sie den obigen Link und finden Sie die Richtlinie, die am besten in Ihrem Kontext funktioniert. Die Optionen sind (Kopieren/aus dem Link eingefügt):

  • eingeschränkt. Lädt keine Konfigurationsdateien oder führt Skripts aus. Eingeschränkt ist die Standardausführungsrichtlinie.
  • AllSigned. Erfordert, dass alle Skripts und Konfigurationsdateien von einem vertrauenswürdigen Herausgeber signiert werden, einschließlich Skripten, die Sie unter auf dem lokalen Computer schreiben.
  • RemoteSigned. Erfordert, dass alle aus dem Internet heruntergeladenen Skripts und Konfigurationsdateien von einem vertrauenswürdigen Herausgeber signiert werden.
  • Uneingeschränkt. Lädt alle Konfigurationsdateien und führt alle Skripte aus. Wenn Sie ein unsigniertes Skript ausführen, das aus dem Internet heruntergeladen wurde, werden Sie vor der Ausführung aufgefordert, die Berechtigung einzugeben.
  • Bypass. Nichts ist blockiert und es gibt keine Warnungen oder Aufforderungen.
  • Nicht definiert. Entfernt die aktuell zugewiesene Ausführungsrichtlinie aus dem aktuellen Bereich. Dieser Parameter wird keine Ausführungsrichtlinie entfernen, die in einem Gruppenrichtlinienbereich festgelegt ist.
+0

Eigentlich sieht es so aus, als würde das Plugin ExecutionPolicy = Bypass setzen ... Das muss also nicht sein. Vielleicht ist es auch, dass sie es automatisch nicht-interaktiv ausführen. Vielleicht ist interaktiv für dieses Skript erforderlich? –

Verwandte Themen