function Write-Log {
param (
[string]$LogString
)
$LogFile = "C:\$(gc env:computername).log"
$DateTime = "[{0:MM/dd/yy} {0:HH:mm:ss}]" -f (Get-Date)
$LogMessage = "$Datetime $LogString"
Add-content $LogFile -value $LogMessage
}
Write-Log "This is my log message"
任何人都可以建议一种更简单的方法来处理将错误记录到文件中吗?
你离你的用例不远了。
为此,您根本不需要 Write-Host。根据您使用的 PS 版本,Write-Host 在您通过管道或其他地方发送数据时并不谨慎
Write-Host 在遗留的 v5x 之前的版本中很糟糕,如果你在管道中发送东西,因为它清除了缓冲区,所以他们不会发送。在 v5x 中 和更高。根据 Monad/PowerShell 的创始人/创建者。
• 写主机有害
根据 Monad/Powershell 的创始人/创建者,它现在写入信息流。
您可以使用任一方法直接记录
Tee-Object
Export-Csv -Append
Out-File -Append
...和其他重定向选项.
您还可以创建并写入您自己的事件日志...
New-EventLog -LogName LogonScripts -Source ClientScripts
Write-EventLog LogonScripts -Source ClientScripts -Message 'Test Message' -EventId 1234 -EntryType Warning
...然后像阅读任何其他事件日志一样稍后阅读它。
有很多示例(脚本和模块),所有 Web 都可以按原样使用,并根据需要开始或调整,甚至是通过 Microsoft powershellgallery.com 提供的示例。
帖子中的注意事项。这……
$LogFile = "C:\$(gc env:computername).log"
...只需简化为...
$LogFile = "C:\$($Env:COMPUTERNAME).log"
#set logfile-path on global scope
$Logfile = "C:\Temp\Logfile.log" # set your Logfile-Path here
function Write-Log {
param
(
[Parameter(ValueFromPipeline)]
[string]$content
)
$FileExists = Test-Path -Path $LogFile
$DateNow = Get-Date -Format 'dd.MM.yyyy HH:mm'
$FileInp = $DateNow + ' | ' + $content
if ($FileExists -eq $True){
Add-Content -Path $LogFile -Value $FileInp
}
else {
New-Item -Path $Logfile -ItemType file
Add-Content -Path $LogFile -Value $FileInp
}
}
#then you only have to pipe it to Write-log like this:
Write-Output "hello world" | Write-Log