2016-03-29 7 views
1

Hoffentlich habe ich diesen Titel richtig formuliert.Wie Zeit in einer Datei mit PowerShell dynamisch anhängen

Transcript-Dateien zeigen nicht die Informationen, die ich möchte, und ich muss in der Lage sein, bestimmte Ereignisse auf einen Blick zu sehen, also füge ich eine zusätzliche Datei hinzu, die ich als Protokolldatei verwende.

Ich möchte die Zeit am Anfang jeder Zeile angehängt haben, aber es dauert einfach die Zeit, die es am Anfang des Skripts abgerufen hat und verwendet es immer und immer wieder.

Script:

start-transcript -path "C:\temp\transcript $(get-date -f dd-MM-yyyy).txt" 
$log = "c:\temp\log $(get-date -f dd-MM-yyyy).txt" 
$logtime = Get-Date -Format "hh:mm:ss" 

Write-output "$logtime First line" | add-content $log 
start-sleep -s 60 
Write-output "$logtime Second line" | add-content $log 

stop-transcript 
exit 

Dies ist die Ausgabe, die ich bekomme, auch wenn es für eine volle Minute lang schläft:

02:43:52 First line 
02:43:52 Second line 

sehr gut Es kann keine Möglichkeit, dies zu tun, aber Gedanken Ich würde es trotzdem versuchen.

Danke für jede Hilfe.

Antwort

2

Können Sie dies jedes Mal $ logtime zuweisen, wenn Sie es ausgeben möchten?

$logtime = [System.DateTime]::Now 

Diese Methode verspricht, aktuelle Zeit zu erhalten.

Bearbeitet, um den Vorschlag zu entfernen, den Sie Get-Date jedes Mal neu zuordnen, da das für Sie nicht funktionierte.

+0

Leider nein. Es setzt auch auf einer neuen Zeile jedes Mal, wenn auf diese Weise getan: '03.14.34 Erste Zeile 03:14:34 Zweite line' – Chris

+0

Hier ist eine andere versuchen, drücken die Daumen! – Willcodeforfun

+0

Oh, mein Fehler! Ich dachte, du wolltest es machen: 'Schreibe-Ausgabe $ logtime" Erste Zeile "| add-content $ log'. Wenn Sie '$ logtime = Get-Date -Format" hh: mm: ss "' oder '$ logtime = [System.DateTime] :: Now 'vor dem Aufruf der Variable' $ logtime' hinzufügen, funktioniert es tatsächlich. Das ist zwar ein großer Ärger, aber ich denke, das ist der Preis, den ich für eine angepasste Protokolldatei bezahlen muss! Vielen Dank für Ihre Hilfe, es ist sehr geschätzt. – Chris

1

Schluss Code, dank „Willcodeforfun“:

start-transcript -path "C:\temp\transcript $(get-date -f dd-MM-yyyy).txt" 
$log = "c:\temp\log $(get-date -f dd-MM-yyyy).txt" 

$logtime = Get-Date -Format "hh:mm:ss" 
Write-output $logtime "First line" | add-content $log 
start-sleep -s 60 
$logtime = Get-Date -Format "hh:mm:ss" 
Write-output $logtime "Second line" | add-content $log 

stop-transcript 
exit 

Während ich das Gefühl, dass diese Art von Niederlagen der Zweck der Variablen und schmerzhaft ist, durch mein ganzes Skript hinzufügen (sieht chaotisch), hat es den Job und macht das Endergebnis sauber und einfach zu lesen.

Das oben genannte nimmt keine Aufnahme bei "Willcodeforfun", aber macht einen Versuch bei Powershells Unfähigkeit, eine Variable zu verwenden, um die tatsächliche aktuelle Zeit zu erhalten.

1

Schreiben Sie eine Funktion für das, was Sie tun möchten.

function Write-Log1 ($message, $logfile) 
{ 
    $logtime = Get-Date -Format "hh:mm:ss" 
    Write-Output "$logtime $message" | Add-Content $logfile 
} 

function Write-Log2 ($message) 
{ 
    $logfile = Join-Path "c:\temp\log" "$(get-date -f dd-MM-yyyy).txt" 
    $logtime = Get-Date -Format "hh:mm:ss" 
    Write-Output "$logtime $message" | Add-Content $logfile 
} 


# call like this: 

Write-Log1 "First line" $log 
Write-Log1 "Second line" $log 

# if you want, hard code the log inside the function 

Write-Log2 "First line" $log 
Write-Log2 "Second line" $log 

Ich bin sicher, mit etwas Suche, finden Sie ausführlichere und vollständige Beispiele für ein ähnliches Muster.

Verwandte Themen