Adding a Timestamp to a Pipeline of Strings
If I'm doing something long-running, and I want it to know when various lines of output are generated, assuming they are being sent to STDOUT (something PSH is NOT good at), here's a quick way to preface the output with a timestamp.
-Format allows us to pass a formatting parameter to Get-Date.
-AsObject returns the output as a series of PSCustomObjects instead of Strings.
-All outputs blank lines, which are normally excluded.
function Add-TimeStamp {
param (
[string]$Format = $null,
[switch]$AsObject,
[switch]$All
)
process {
$input | % {
if ([string]$_ -or $All) {
$object = [System.Object] | Select-Object -Property Time, String;
if ($Format) {
$object.Time = Get-Date -Format $format;
} else {
$object.Time = Get-Date;
}
$object.String = $_.ToString();
if ($AsObject) {
$object;
} else {
"$($object.Time)`t$($object.String)";
}
}
}
}
}