Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing $TaskName = "MinerOpsAgent" $GuiPath = "C:\MinerOpsAgent\MinerOpsAgentGUI.ps1" $LogPath = "C:\MinerOpsAgent\logs\agent.log" $DashboardUrl = "https://plexus.lussier.cc/dashboard" function Start-Agent { Start-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue } function Stop-Agent { Stop-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue } function Restart-Agent { Stop-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue Start-Sleep -Seconds 2 Start-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue } function Open-Gui { Start-Process powershell.exe -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$GuiPath`"" } function Open-Dashboard { Start-Process $DashboardUrl } function Open-Log { if (Test-Path $LogPath) { Start-Process notepad.exe $LogPath } } function Get-AgentStatusText { $task = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue if (!$task) { return "MinerOps Agent: task not installed" } return "MinerOps Agent: $($task.State)" } $notify = New-Object System.Windows.Forms.NotifyIcon $notify.Icon = [System.Drawing.SystemIcons]::Application $notify.Text = Get-AgentStatusText $notify.Visible = $true $menu = New-Object System.Windows.Forms.ContextMenuStrip $itemOpen = $menu.Items.Add("Open Agent GUI") $itemOpen.Add_Click({ Open-Gui }) $itemDashboard = $menu.Items.Add("Open Plexus Dashboard") $itemDashboard.Add_Click({ Open-Dashboard }) $menu.Items.Add("-") | Out-Null $itemStart = $menu.Items.Add("Start Agent") $itemStart.Add_Click({ Start-Agent Start-Sleep -Seconds 1 $notify.Text = Get-AgentStatusText }) $itemStop = $menu.Items.Add("Stop Agent") $itemStop.Add_Click({ Stop-Agent Start-Sleep -Seconds 1 $notify.Text = Get-AgentStatusText }) $itemRestart = $menu.Items.Add("Restart Agent") $itemRestart.Add_Click({ Restart-Agent Start-Sleep -Seconds 1 $notify.Text = Get-AgentStatusText }) $menu.Items.Add("-") | Out-Null $itemLog = $menu.Items.Add("Open Log") $itemLog.Add_Click({ Open-Log }) $itemExit = $menu.Items.Add("Exit Tray Icon") $itemExit.Add_Click({ $notify.Visible = $false $notify.Dispose() [System.Windows.Forms.Application]::Exit() }) $notify.ContextMenuStrip = $menu $notify.Add_DoubleClick({ Open-Gui }) $timer = New-Object System.Windows.Forms.Timer $timer.Interval = 5000 $timer.Add_Tick({ $notify.Text = Get-AgentStatusText }) $timer.Start() [System.Windows.Forms.Application]::Run()