如何使用 Powershell 在文件中动态附加时间
How to dynamically append time in a file using Powershell
希望我的标题措辞正确。
抄本文件没有显示我想要的信息,我需要能够一眼看到特定事件,因此我添加了一个额外的文件,用作日志文件。
我想在每一行的开头附加时间,但它只需要在脚本开头检索到的时间并一遍又一遍地使用它。
脚本:
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
这是我得到的输出,即使它休眠了整整一分钟:
02:43:52 First line
02:43:52 Second line
很可能没有办法做到这一点,但我想无论如何我都会试一试。
感谢您的帮助。
每次你想输出它时,你能把它分配给 $logtime 吗?
$logtime = [System.DateTime]::Now
此方法承诺获取当前时间。
编辑以删除您每次都重新分配给 Get-Date 的建议,因为这对您不起作用。
最终代码,感谢"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
虽然我觉得这种方式违背了变量的目的,并且很难在我的整个脚本中添加(看起来很乱),但它完成了工作并使最终结果整洁且易于阅读。
以上不是针对"Willcodeforfun",而是针对Powershell无法使用变量获取当前时间的问题。
为你想做的事情写一个函数。
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
我相信通过一些搜索,您可以找到类似模式的更详尽和完整的示例。
希望我的标题措辞正确。
抄本文件没有显示我想要的信息,我需要能够一眼看到特定事件,因此我添加了一个额外的文件,用作日志文件。
我想在每一行的开头附加时间,但它只需要在脚本开头检索到的时间并一遍又一遍地使用它。
脚本:
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
这是我得到的输出,即使它休眠了整整一分钟:
02:43:52 First line
02:43:52 Second line
很可能没有办法做到这一点,但我想无论如何我都会试一试。
感谢您的帮助。
每次你想输出它时,你能把它分配给 $logtime 吗?
$logtime = [System.DateTime]::Now
此方法承诺获取当前时间。
编辑以删除您每次都重新分配给 Get-Date 的建议,因为这对您不起作用。
最终代码,感谢"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
虽然我觉得这种方式违背了变量的目的,并且很难在我的整个脚本中添加(看起来很乱),但它完成了工作并使最终结果整洁且易于阅读。
以上不是针对"Willcodeforfun",而是针对Powershell无法使用变量获取当前时间的问题。
为你想做的事情写一个函数。
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
我相信通过一些搜索,您可以找到类似模式的更详尽和完整的示例。