#Requires -RunAsAdministrator $ErrorActionPreference = 'Continue' $dte = New-Object -ComObject TcXaeShell.DTE.17.0 $dte.MainWindow.Visible = $true try { $dte.SuppressUI = $false } catch {} $dte.Solution.Open('C:\Users\tonycao\work\twincat3-auto-cli\TwinCAT_EL6695_Primary_2kHz\TwinCATProject1.sln') Start-Sleep 30 try { $dte.ExecuteCommand('Build.BuildSolution') } catch {} Start-Sleep 15 for ($i = 0; $i -lt 30; $i++) { $bs = $null try { $bs = $dte.Solution.SolutionBuild.BuildState } catch {} if ($bs -eq 3) { break } Start-Sleep 2 } Write-Host "BuildState=$($dte.Solution.SolutionBuild.BuildState) LastBuildInfo=$($dte.Solution.SolutionBuild.LastBuildInfo)" try { $el = $dte.ToolWindows.ErrorList $items = $el.ErrorItems Write-Host "error items: $($items.Count)" for ($i = 1; $i -le [Math]::Min($items.Count, 30); $i++) { $it = $items.Item($i) Write-Host " [$($it.ErrorLevel)] $($it.Description) ($($it.FileName):$($it.Line))" } } catch { Write-Host "errorlist err: $_" } try { $ow = $dte.ToolWindows.OutputWindow foreach ($pane in $ow.OutputWindowPanes) { $td = $pane.TextDocument $ep = $td.StartPoint.CreateEditPoint() $content = $ep.GetText($td.EndPoint) $lines = ($content -split "`r?`n") | Where-Object { $_.Trim() -ne '' } Write-Host "=== pane '$($pane.Name)': $($lines.Count) lines ===" $lines | Select-Object -Last 30 | ForEach-Object { Write-Host " $_" } } } catch { Write-Host "ow err: $_" }