2016-08-25 30 views
0

Powershell 32ビットでかなり簡単なスクリプトを書いていますが、うまくいきます。PowershellスクリプトはWindowsのJenkinsプラグインでは動作しません

たとえば、インターネットエクスプローラを開いてキーを入力したいとします。次のコードは、PowerShell ISEで実行するとうまく動作します。

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}") 

私はWindows PowerShell pluginをダウンロードしているし、それを介して同じコードを実行すると、以下のエラーを受け取った:

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 

は、PowerShellでないように私のコードは、ジェンキンスを介して動作しませんなぜそこに理由です?私は正常に動作したいくつかの単純なエコースクリプトを試しましたが、それ以上の複雑さとエラーをスローします。

+0

ビルドサーバーでこれらのエラーの原因となる依存関係が存在する可能性があります。 –

+0

jenkinsエージェントを実行するためにどのユーザーを使用していますか、権限がないと問題が発生する可能性があります。 COMオブジェクトには、他のアクセス許可も関連付けられています。 – JamesD

+0

あなたはこのアンソニーを詳しく説明できますか?私はジェンキンスにとって少し新しく、状況を改善する方法を始める。 – LeChuck

答えて

0

あなたは一度実行ポリシーを設定する必要があります。管理者としてhttps://technet.microsoft.com/library/hh849812.aspx

Set-ExecutionPolicy Unrestricted 

実行PowerShellとそのコマンドを実行します。 Unrestrictedを使用するとセキュリティ上の懸念が生じることがあります。しかし、それがうまくいくなら、上記のリンクを読んで、あなたの文脈で最も効果的な方針を見つけてください。オプションには(リンクから貼り付けコピー/)です:を制限

  • 。構成ファイルを読み込んだり、スクリプトを実行したりしません。 Restrictedはデフォルトの実行ポリシーです。
  • AllSigned。 ローカルコンピュータに書き込むスクリプトを含む、信頼できる発行元がすべてのスクリプトと構成ファイルに署名する必要があります。
  • RemoteSigned。インターネットからダウンロードしたすべてのスクリプトと構成ファイルに、信頼できる発行元が署名する必要があります。
  • 無制限。すべての構成ファイルをロードし、すべてのスクリプトを実行します。インターネットからダウンロードされた署名されていないスクリプトを実行すると、実行する前にアクセス許可を求めるプロンプトが表示されます。
  • バイパス。何もブロックされず、警告やプロンプトも表示されません。
  • 未定義。現在割り当てられている実行ポリシーを現在のスコープから削除します。このパラメーターは、グループポリシースコープで設定されている実行ポリシー を削除しません。
+0

実際、プラグインはExecutionPolicy = Bypass ...のように設定されています。おそらく、自動的に非インタラクティブに実行することもあります。おそらくこのスクリプトにインタラクティブが必要ですか? –

関連する問題