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

[玩转系统] 如何在 PowerShell 脚本中创建日志文件?

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

如何在 PowerShell 脚本中创建日志文件?


要求:生成日志文件并向其中添加消息以跟踪 PowerShell 脚本的执行情况。

如何在 PowerShell 中创建日志文件?

创建 PowerShell 脚本时,创建日志文件来跟踪脚本的进度并诊断可能出现的任何问题通常很有用。有时,我们可能需要记录消息来帮助我们排除脚本执行过程中出现问题的位置和原因,或者用于跟踪目的。在这篇文章中,我们将讨论如何在 PowerShell 脚本中创建日志文件。

通过向文本文件添加内容来生成日志文件的最简单方法是:


Function Log-Message([String]$Message)
{
    Add-Content -Path "C:\Temp\Log.txt" $Message
}

Log-Message "Beginning exeuction of the script:"
Log-Message "Exeucting of the script..."
Log-Message "Completed exeuction of the script!"

案例1:在当前目录中根据时间戳创建日志文件

让我们根据当前时间戳创建一个日志文件,并在其中添加时间戳的日志消息。


Function Log-Message()
{
 param
    (
    [Parameter(Mandatory=$true)] [string] $Message
    )

    Try {
        #Get the current date
        $LogDate = (Get-Date).tostring("yyyyMMdd")

        #Get the Location of the script
        If ($psise) {
            $CurrentDir = Split-Path $psise.CurrentFile.FullPath
        }
        Else {
            $CurrentDir = $Global:PSScriptRoot
        }

        #Frame Log File with Current Directory and date
        $LogFile = $CurrentDir+ "\" + $LogDate + ".txt"

        #Add Content to the Log File
        $TimeStamp = (Get-Date).toString("dd/MM/yyyy HH:mm:ss:fff tt")
        $Line = "$TimeStamp - $Message"
        Add-content -Path $Logfile -Value $Line

        Write-host "Message: '$Message' Has been Logged to File: $LogFile"
    }
    Catch {
        Write-host -f Red "Error:" $_.Exception.Message 
    }
}

#Call the function to Log messages
Log-Message "Script Execution Started"
Log-Message "Script is being Executed"
Log-Message "Script Execution Completed"

和结果

[玩转系统] 如何在 PowerShell 脚本中创建日志文件?

案例 2:在给定位置创建日志文件

这次,让我们为给定位置创建一个日志文件。


Function Log-Message()
{
 param
    (
    [Parameter(Mandatory=$true)] [string] $Message,
    [Parameter(Mandatory=$true)] [string] $LogFilePath
    )

    Try {
        #Add Content to the Log File
        Add-content -Path  $LogFilePath -Value $Message
        Write-host "Message: '$Message' Has been Logged to File: $LogFilePath" -f Yellow
    }
    Catch {
        Write-host -f Red "Error:" $_.Exception.Message 
    }
}

#Set Location for Log File
$LogFilePath = "C:\Temp\AppLog.txt"

#Ensure the Parent Folder for Log File
$FolderPath= Split-Path $LogFilePath
If(!(Test-Path -path $FolderPath))  
{  
    New-Item -ItemType directory -Path $FolderPath | Out-Null
}

#Delete the Log file if exists
If(Test-Path $LogFilePath) 
{
    Remove-Item $LogFilePath
}

#Log Start Time of the Script
$StartTime =   (Get-Date)
Log-Message "Script Started at: $(Get-date -format 'dd/MM/yyy hh:mm:ss tt')" -LogFilePath $LogFilePath

#Pause for 2 Seconds
Sleep 2

#Log End Time
$EndTime =   (Get-Date)
Log-Message "Script Ended at: $(Get-date -format 'dd/MM/yyy hh:mm:ss tt')" -LogFilePath $LogFilePath

#Get Elapsed Time
$ElapsedTime = ($EndTime - $StartTime).Seconds
Log-Message "Script Execution Time: $ElapsedTime Seconds" -LogFilePath $LogFilePath

这是另一种简化的方法:


#Function to Add Content to Log File
Function Write-Log {

  [CmdletBinding()]
  
  Param ([Parameter(Mandatory=$true)][string]$LogFilePath, [Parameter(Mandatory=$true)][string]$Message)
  
  Process{
    #Add Message to Log File with timestamp
    "$([datetime]::Now) : $Message" | Out-File -FilePath $LogFilePath -append;
  
    #Write the log message to the screen
    Write-host $([datetime]::Now) $Message
  }
}

#Usage
Write-Log "C:\Temp\Log.txt" "Script execution started..."
Sleep(5)
Write-Log "C:\Temp\Log.txt" "Script is being executed..."
Sleep(5)
Write-Log "C:\Temp\Log.txt" "Script execution Completed..."

结论:

在 PowerShell 脚本中创建日志文件对于跟踪脚本的进度以及调试可能出现的任何问题非常有用。通过使用内置的“Out-File”或“Add-Content”cmdlet,可以轻松创建日志文件并将输出写入其中。可以将日志文件配置为每次运行脚本时将新信息附加到文件末尾。测试日志文件以确保它按预期工作并包含您需要的信息非常重要。总的来说,使用日志文件可以极大地提高 PowerShell 脚本的可维护性和故障排除能力。

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

取消回复欢迎 发表评论:

关灯