如何在PowerShell中写日志?

问题描述 投票:0回答:2
  1. 我正在尝试为我的 PowerShell 脚本创建错误日志。我需要创建一个函数,这样我就可以直接调用该函数而不是使用 Write-Host,并且无论我在脚本中遇到什么错误都可以直接记录到日志文件中。
  2. 我使用了以下方法,但似乎并不适用于每个 PowerShell 脚本。
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"

任何人都可以建议一种更简单的方法来处理将错误记录到文件中吗?

powershell error-handling logfile
2个回答
1
投票

你离你的用例不远了。

为此,您根本不需要 Write-Host。根据您使用的 PS 版本,Write-Host 在您通过管道或其他地方发送数据时并不谨慎

Write-Host 在遗留的 v5x 之前的版本中很糟糕,如果你在管道中发送东西,因为它清除了缓冲区,所以他们不会发送。在 v5x 中 和更高。根据 Monad/PowerShell 的创始人/创建者。

• 写主机有害

根据 Monad/Powershell 的创始人/创建者,它现在写入信息流。

但是,自从 v5x 的东西以来,这个想法已经改变了。

您可以使用任一方法直接记录

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"

0
投票
#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
© www.soinside.com 2019 - 2024. All rights reserved.