当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 日志记录 |增强 PowerShell 日志记录的先决条件

作者:精品下载站 日期:2024-12-14 05:01:57 浏览:15 分类:玩电脑

PowerShell 日志记录 |增强 PowerShell 日志记录的先决条件


[玩转系统] PowerShell 日志记录 |增强 PowerShell 日志记录的先决条件

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 事件 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

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

[玩转系统] PowerShell 日志记录 |增强 PowerShell 日志记录的先决条件

输出:

[玩转系统] PowerShell 日志记录 |增强 PowerShell 日志记录的先决条件

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

[玩转系统] PowerShell 日志记录 |增强 PowerShell 日志记录的先决条件

输入:

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 日志记录 |增强 PowerShell 日志记录的先决条件

结论

因此,本文详细介绍了 PowerShell 中的日志记录。它详细解释了可用的各种类型的日志记录以及每种日志记录机制的使用。本文通过示例解释了如何将大型日志文件拆分为较小的日志文件。它还解释了如何将日志记录到文件或控制台。日志记录是脚本编写过程中应遵循的最佳实践之一,因为每当发生异常情况时,它都会让生活变得更轻松。了解更多信息的最佳方法是编写示例脚本并执行它们。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯