簡體   English   中英

VSTS托管代理中的運行空間和作業發布了Azure Powershell腳本

[英]Runspaces and Jobs in VSTS hosted agent release Azure Powershell script

我有一個帶有托管代理的VSTS設置,我試圖運行Azure Powershell腳本以使用Runspaces異步方法調整經典雲服務的大小。 當我在本地計算機上運行該腳本時,該腳本運行良好。

[hashtable]$myServices = @{}
$myServices.Add('serviceA',3)
$myServices.Add('serviceB',1)
$myServices.Add('serviceC',2)
$myServices.Add('serviceD',1)
$myServices.Add('serviceE',3)

$Throttle = 5 #threads

$ScriptBlock = {
   Param (
      [string]$serviceName,
      [int]$instanceCount
   )
    Try{
        $roles = Get-AzureRole -ServiceName $serviceName -Slot Production -ErrorAction Stop
        foreach($role in $roles){
            Write-Output 'Currently on ' + $role.RoleName  
            $result = Set-AzureRole -ServiceName $serviceName -Slot Production -RoleName $role.RoleName -Count $instanceCount -ErrorAction Stop
            $thisRunResult = New-Object PSObject -Property @{
                Service = $serviceName            
                Role = $role.RoleName            
                Description = $result.OperationDescription
                Status = $result.OperationStatus            
            }
            $RunResult += $thisRunResult
        }
        Return $RunResult   
    } Catch {
        write-output "An error occurred in the script block."
        write-output $_.Exception.Message       
    }
}

Try{
    $ErrorActionPreference = "Stop"
    $RunspacePool = [RunspaceFactory]::CreateRunspacePool(1, $Throttle)
    $RunspacePool.Open()
    $Jobs = @()
} Catch {
    write-output "An error occurred while instantiating Runspaces."
    write-output $_.Exception.Message       
} Finally {
    $ErrorActionPreference = "Continue"
}

foreach ($service in $qaServices.GetEnumerator()){   
    Write-Output 'Currently on ' + $service.Key
    Try{
        $ErrorActionPreference = "Stop"
        $Job = [powershell]::Create().AddScript($ScriptBlock).AddArgument($service.Key).AddArgument($service.Value)
        write-output "Line after the Job is created gets executed."
        $Job.RunspacePool = $RunspacePool
        $Jobs += New-Object PSObject -Property @{
            RunNum = $service.Key
            Pipe = $Job
            Result = $Job.BeginInvoke()
        }
    } Catch {
        write-output "An error occurred creating job."
        write-output $_.Exception.Message       
    } Finally {
        $ErrorActionPreference = "Continue"
    }

}

Write-Host "Waiting.." -NoNewline
Do {
   Write-Host "." -NoNewline
   Start-Sleep -Seconds 1
} While ( $Jobs.Result.IsCompleted -contains $false)
Write-Host "All jobs completed!"

$Results = @()
ForEach ($Job in $Jobs)
{   $Results += $Job.Pipe.EndInvoke($Job.Result)
}

$Results | Select-Object -Property Service,Role,Description,Status | Sort-Object -Property Service | Out-Host

我的“嘗試/捕獲”資料都沒有在日志中輸出任何內容。 在本地運行時,得到的輸出與我期望的一樣,帶有新的“。” 每秒直到完成:

Waiting.........................All jobs completed!

就本地而言,這是幾百個……是因為花費數分鍾來縮放事物。 在VSTS中運行時,大約有八個點立即返回。 因此,看起來好像實際上什么都沒有發生(特別是Jobs尚未初始化),但是沒有錯誤可以告訴我問題出在哪里。 提前致謝。

(未試用)嘗試此操作:

try {    
   $ErrorActionPreference = "Stop"
   # Your code
} catch{
   Write-Host $_.Exception
}finally{
   $ErrorActionPreference = "Continue"
}

默認情況下, $ErrorActionPreference設置為Continue因此將其設置為Stop表示所有錯誤都在“終止”,因此try / catch塊捕獲了異常。

或第二個選項是使用通用參數-ErrorAction Stop

   try {               
       $result = Set-AzureRole -ServiceName $serviceName -Slot Production -RoleName $role.RoleName -Count $instanceCount -ErrorAction Stop
   } catch{
           Write-Host $_.Exception
   }

我對AD(活動目錄)命令行開關有相同的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM