首页 > 解决方案 > 脚本执行在 jenkins powershell 插件中持续无限时间

问题描述

我能够在机器上执行 powershell 脚本,但无法使用 jenkins powershell 插件执行它

我的 powershell 脚本执行另一个程序的 UI(QlikView),然后在我直接在机器上执行脚本时关闭它。但是,当我使用 jenkins powershell 插件执行相同操作时,它不起作用,执行会持续无限时间。

[CmdletBinding()]
 param (
$FullQvwPath
 )


function qv-SaveAndClose-QVW
{
   param(
   [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
   $QvwPath
  )


try {

    $qvComObject = new-object -comobject QlikTech.QlikView
    $NewCreatedDoc = $qvComObject.CreateDoc()
    $NewCreatedDoc.SaveAs($QvwPath)
    $NewCreatedDoc.CloseDoc()


    $qvComObject.Quit()

}
finally {

}

}

qv-SaveAndClose-QVW -QvwPath $FullQvwPath

我已将上述代码放入文件中 - QlikSaveAndClose.ps1

.\QlikSaveAndClose.ps1 -FullQvwPath 'C:\Program Files (x86)\Jenkins\Dashboard.qvw

标签: powershelljenkinsjenkins-pluginsqlikview

解决方案


会不会是文件已经存在了?在这种情况下SaveAs会提示覆盖文件。所以,先删除它。也将Quit放在 finally 中,这样 comobject 总是关闭的,即使出现错误也是如此。虽然我们这样做了,但您的 cmdlet只能使用经过批准的动词-名词名称:

[CmdletBinding()]
param (
    [Parameter(Mandatory=$true)]
    [String] $FullQvwPath
)

function Save-QVW
{
    param (
        [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
        [String] $Path
    )

    $qvComObject = New-Object -ComObject "QlikTech.QlikView"
    try 
    {
        $newCreatedDoc = $qvComObject.CreateDoc()
        if (Test-Path -Path $Path)
        {
            Remove-Item -Path $Path -Force
        }
        $newCreatedDoc.SaveAs($Path)
        $newCreatedDoc.CloseDoc()
    }
    finally 
    {
        $qvComObject.Quit()
    }
}

Save-QVW -Path $FullQvwPath

推荐阅读