PowerShell日志记录

1,118 阅读5分钟

PowerShell Logging

PowerShell日志的介绍

对于程序员来说,在他们的脚本中启用日志是非常重要的,因为这将有助于在脚本的意外行为中进行故障排除。日志是捕捉错误信息或异常的机制,但它也有助于识别直到脚本执行的点。有时,如果一个脚本只对几个值起作用,而对其他值不起作用,那么如果启用了日志记录,程序员就很容易缩小问题的范围并加以解决。PowerShell提供了多种日志记录方法,本文将详细介绍。PowerShell提供了三种类型的日志,如模块日志、脚本块日志和转录日志。

启用增强型PowerShell日志的先决条件

对于Windows 10,自动支持增强型PowerShell日志记录。

对于使用PowerShell v5.0的windows 7,8,2008,2012,需要以下组件

  • .Net 4.5
  • WMF (4.0/5.0)

对于使用PowerShell v4.0的windows 7,8,2008,2012,需要以下组件

  • .Net 4.5
  • WMF (4.0)

1.日志配置

在尝试在脚本中记录错误之前,在组策略中启用它们是很重要的。下面的步骤是

本地组策略编辑器à管理模板àWindows组件àWindows PowerShell。在这里面,我们需要启用打开模块日志,打开PowerShell脚本块日志和打开PowerShell转录。

2.模块日志记录

模块日志记录流水线的细节,如变量初始化和脚本执行时的命令调用。它将记录脚本和数据的样本,这些样本被格式化后作为输出发送。此外,它将捕捉其他类型可能遗漏的日志,但可能无法捕捉某些命令。这种类型的日志事件被写在4103-event id下。

3.脚本块日志记录

这是用来捕获所有脚本和命令的日志。这是用来确定来自外部攻击者的攻击模式。甚至解码的命令也会被捕获并记录下来。这个日志事件被记录在事件id-4104下。如果日志超过了指定的限制,它将被分割成多个文件并被捕获。从PowerShell 5.0开始,如果脚本包含某些预定义的命令或可能容易受到攻击的脚本技术,则自动启用脚本封锁。这些被记录在警告级别下,除非有目的地禁用脚本阻塞记录。这将捕获所有的活动,而不仅仅是可疑的活动。非可疑活动将被记录在事件ID 4104下,但可以是冗长的或信息级别。

4.转录日志

如果启用了事务记录,就会为每个会话创建一条记录,包括该会话中出现的每个输入和输出命令。这些记录连同时间戳和元数据一起被写入一个文本文件。它们被自动命名,以PowerShell_transcript开始。写入文件的默认位置是用户的文档文件夹;如果需要,可以改变这个位置。存储它们的最佳位置是网络驱动器,这样攻击者就不能轻易访问它们。文件的大小非常小,然后可以使用任何标准工具进行审查。 必须在本地组策略编辑器中启用适当的记录机制,或在注册表中设置其值。

5.将巨大的日志文件分割成小文件

有时,生成的日志文件可能是巨大的。这可能会妨碍调试过程。在这种情况下,如果我们能将单个日志文件分割成较小的文件,将会很有帮助。下面的脚本将有助于实现这一目标。该脚本首先确定需要分割的源文件。然后,它询问要保存新分割的日志文件的目标文件夹。接下来,该脚本提示用户每个日志文件中应包含的行数。一旦完成,新的日志文件就产生了。

输入。

Write-Host "Welcome to the demo of Split a large log file into smaller files" $lc = 0 $fn = 1 # Getting the source log file $source = Read-Host "Enter the log file path" # Getting the destination where the smaller log files will be saved $destination = Read-Host "Enter the destination path" Write-Host "The total number of lines is being calculated ..... " Get-Content $source | Measure-Object | ForEach-Object { $sourcelc = $_.Count } #total number of lines in source file Write-Host " total number of lines present is " $sourcelc # size of each destination file $destfilesize = Read-Host "Number of lines to be present in each file" $maxsize = [int]$destfilesize Write-Host File is $source - destination is $destination - new file line count will be $destfilesize $content = get-content $source | % { Add-Content $destination\splitlog$fn.txt "$_" $lc ++ If ($lc -eq $maxsize) { $fn++ $lc = 0 } } Write-Host "The new number of smaller files generated is " $fn Write-Host "Please check the for the files in" $destination

在运行脚本之前,源目录中的文件数量。

Before running the script

输出。

PowerShell Logging output 1

运行脚本后,目录中的文件数量。

After running the script

输入:在运行脚本之前,源目录中的文件数量。

Write-Host "Welcome to logging example" Write-Host "Writing success message to console" for($i=0; $i -le 10; $i++) { Write-Host "the value is "$i } Write-Host "Demo of writing log to a text file" for($i=0; $i -le 10; $i++) { $i |Out-File -FilePath C:\Vignesh\TestLog\test.txt -Append } Write-Host "The logging is done to the file.Please check"

输出。

PowerShell Logging output 2

结论

因此,这篇文章详细介绍了PowerShell中的日志记录。它详细解释了各种可用的日志类型和每种日志机制的使用。文章用一个例子解释了如何将一个大的日志文件分割成小的日志文件。它还解释了如何将日志记录到文件或控制台。日志是脚本编写过程中需要遵循的最佳实践之一,因为每当有不寻常的事情发生时,它能使生活变得更简单。了解更多这方面的信息的最好方法是编写样本脚本并执行它们。

推荐文章

这是一个关于PowerShell日志的指南。在这里,我们讨论了各种类型的PowerShell日志,以及每种日志机制的用途。

  1. PowerShell转换为字符串
  2. PowerShell Get-Item
  3. PowerShell ForEach对象
  4. PowerShell别名

The postPowerShell Loggingappeared first onEDUCBA.