2016-04-04 5 views
0

ich mein Powershell-Profil verändert haben sich wie folgt Datetime in der noblen-hg Aufforderung enthalten:Hinzufügen von Datum Zeit Posh-hg prompt

if(!(Test-Path function:\TabExpansion)) { New-Item function:\Global:TabExpansion -value '' | Out-Null } 

# Load posh-hg example profile 
. 'C:\ProgramData\chocolatey\lib\Posh-HG\JeremySkinner-posh-hg-e273b0d\profile.example.ps1' 

Rename-Item Function:\Prompt PoshHGPrompt -Force 
function Prompt() {if(Test-Path Function:\PrePoshHGPrompt){++$global:poshScope; New-Item function:\script:Write-host -value "param([object] `$object, `$backgroundColor, `$foregroundColor, [switch] `$nonewline) " -Force | Out-Null;$private:p = PrePoshHGPrompt; if(--$global:poshScope -eq 0) {Remove-Item function:\Write-Host -Force}}PoshHGPrompt} 

$global:HgPromptSettings.BeforeText = " [$(Get-Date -format g)] `n[" 

Aus irgendeinem Grund das Datum überhaupt nicht aktualisiert. Ich vermute, dass es etwas damit zu tun hat, wie posh-hg die Aufforderung aufbaut, aber das ist ein bisschen wahnsinnig.

+0

Nicht eine wilde Vermutung, es ist genau richtig! :) Die 'BeforeText' -Eigenschaft ist eine Zeichenkette, also wird der' $() 'Teilausdruck * zum Zeitpunkt der Zuweisung * ausgewertet und bleibt statisch –

+0

Ok, wir werden _wild_ zu _lucky_ ändern;) Also, irgendwelche Ideen wie einen dynamischen Datum-Zeit-String in der Mitte kleben? – codedog

+0

Setzen Sie es in die Prompt-Funktion kurz vor dem PoshHGPrompt-Aufruf :-) –

Antwort

1

Derzeit gibt es keine Möglichkeit zu tun, was Sie mit BeforeText tun möchten.

Wenn Sie look at the code, BeforeText in Write-Prompt als String übergeben (L29):

Write-Prompt $s.BeforeText -BackgroundColor $s.BeforeBackgroundColor -ForegroundColor $s.BeforeForegroundColor 

Damit dies funktioniert, die Write-Prompt Funktionscode würde haben sich geändert:

function Write-Prompt($Object, $ForegroundColor, $BackgroundColor = -1) { 
    $parameters = @{ 
     'NoNewLine' = $True; 
     'ForegroundColor' = $ForegroundColor; 
    } 

    if ($Object -is [ScriptBlock]) { 
     $parameters.Add('Object', (&$Object)) 
    } else { 
     $parameters.Add('Object', $Object) 
    } 

    if ($BackgroundColor -ge 0) { 
     $parameters.Add('BackgroundColor', $BackgroundColor) 
    } 

    Write-Host @parameters 
} 

Ich bin sicher, es könnte noch ein paar Änderungen geben, die gemacht werden müssten, um das perfekt zu machen, aber trotzdem ...

Dann könnten Sie $global:HgPromptSettings.BeforeText wie folgt festgelegt:

$global:HgPromptSettings.BeforeText = {" [$(Get-Date -format g)] `n["} 
0

ich das gleiche mit Posh-Git zu tun versuchte, und bekam das gleiche Ergebnis: Zeitstempel einmal bei Sitzungsbeginn ausgewertet und danach fixiert wird.

Also suchte ich im Internet, und fand diesen Thread über posh-hg und kam zu dem Schluss, dass dies auch für posh-git gelten muss.

Später in der gleichen Nacht, las ich Post-Git-Probleme und fand this thread über das Hinzufügen von "Nebenwirkungen" zur Eingabeaufforderung. Mit meiner neuen Niederlage fügte ich einen Kommentar hinzu und sagte, dass es wegen der "nur einmal bewertet" -Dinge einfach nicht funktionieren würde.

Aber siehe da! Stellt sich heraus, dass meine Powershell-Kenntnisse genau so begrenzt ist, wie ich befürchtet hatte:

@rkeithhill: Seien Sie vorsichtig, einfache Anführungszeichen zu verwenden, wenn Sie die Zeichenfolge liefern. Wenn Sie doppelte Anführungszeichen verwenden, werden alle Variablen/Unterausdrücke, z. B. $(), nur einmal ausgewertet.

So jetzt habe ich $global:GitPromptSettings.DefaultPromptPrefix = '$(Get-Date -format HH:mm:ss) ' in meinem Profil, und bekommen Zeitstempel vor meiner Eingabeaufforderung. Natürlich habe ich keine Ahnung, ob das für Posh-Hg funktioniert, aber zumindest könntest du es versuchen.