Examples/BackgroundData.ps1

#requires -module @{ModuleName='PowerLine';ModuleVersion='3.4.0'}

Get-Job -Name WeatherQuery -EA 0| Stop-Job -PassThru | Remove-Job
$global:WeatherJob = Start-ThreadJob -Name WeatherQuery {
    while ($true) {
        Invoke-RestMethod "wttr.in?format=%c%t"
        Start-Sleep 300 # This job will update the weather every 5 minutes
    }
}

Set-PowerLinePrompt -SetCurrentDirectory -PowerLineFont -Title {
    -join @(
        if (Test-Elevation) { "Admin: " }
        "PS" + $PSVersionTable.PSVersion.Major + " "
        Convert-Path $pwd
    )
} -Colors @(
    "SteelBlue4", "DodgerBlue3", "DeepSkyBlue2", "SkyBlue2", "SteelBlue2", "LightSkyBlue1"
) -Prompt @(
    # Consume the output of the job:
    # In this case, I only want the most recent output, so [-1]
    { $WeatherJob.Output[-1] }
    { "&Gear;" * $NestedPromptLevel }
    { $pwd.Drive.Name }
    { Split-Path $pwd -Leaf }
    {
        # In order for PSReadLine to work properly, it needs the $PromptText set to match the end of my prompt...
        $MyInvocation.HistoryId

        # Because I don't have a "Write-TerminalBlock" I am doing all this by hand:
        # Need to draw ">ID>" but the > each have to be FOREGROUND = the BACKGROUND of the previous block
        # AND the color changes depending on whether nestedPrompt rendered or not
        [string]$CS = [PoshCode.Pansies.Entities]::ExtendedCharacters["ColorSeparator"]
        $thisBg = $NestedPromptLevel ? $bg:SteelBlue2 : $bg:SkyBlue2
        $previousFg = $NestedPromptLevel ? $fg:SkyBlue2 : $fg:DeepSkyBlue2
        $thisFg = $NestedPromptLevel ? $fg:SteelBlue2 : $fg:SkyBlue2

        Set-PSReadlineOption -PromptText @(
            ($thisBg + $previousFg + $CS + $fg:white + $MyInvocation.HistoryId + $thisFg + $bg:clear + $CS)
            ($bg:Gray44 + $previousFg + $CS + $fg:white + $MyInvocation.HistoryId + $fg:Gray44 + $bg:clear + $CS)
        )
    }
    { "`t" }
    { Show-ElapsedTime -Trim }
    { Get-Date -Format "T" }
)