In this tutorial, I will explain how to read log files using PowerShell. Recently, while working on a project for a client in New York, I encountered an issue where we needed to extract specific error messages from a large log file generated by our web application. This tutorial will help you tackle similar challenges by showing you how to parse and analyze log files using PowerShell efficiently.
It is easy to read log files using PowerShell. I will show you different examples related to reading log files in PowerShell.
Read Log Files with PowerShell
In this example, I have taken a log file like below:
2024-10-01 08:15:30 INFO Application started successfully.
2024-10-01 08:16:45 WARN Low disk space on drive C:.
2024-10-01 08:17:12 ERROR Failed to connect to database.
2024-10-01 08:18:05 INFO User JohnDoe logged in.
2024-10-01 08:19:20 ERROR Invalid user credentials for user JaneSmith.
2024-10-01 08:20:30 INFO Scheduled backup completed.
2024-10-01 08:21:45 ERROR Timeout occurred while processing request.
2024-10-01 08:22:15 INFO Application is shutting down.To use this sample file, you can save the file with the name app.log in the C:\Logs directory.
Now, let’s look at a few examples in which I explained how to read this log file and extract the required information.
Example 1: Read a Log File
Let’s start with a simple example of reading a log file using PowerShell. Suppose you have a log file located at C:\Logs\app.log and you want to read its contents.
# Define the path to the log file
$logPath = "C:\Logs\app.log"
# Read the contents of the log file
Get-Content -Path $logPathThe Get-Content cmdlet reads the contents of the specified file and outputs it to the console.
I executed the above file, and you can see the exact output in the screenshot below:

Check out Create a Log File with Date and Time in PowerShell
Example 2: Filter Log Entries
Often, you need to filter log entries to find specific information. For instance, you might want to find all error messages in the log file.
Here is the complete PowerShell script.
# Define the path to the log file
$logPath = "C:\Logs\app.log"
# Read and filter the log file for error messages
Get-Content -Path $logPath | Where-Object { $_ -match "ERROR" }In this example, Where-Object filters the log entries that contain the keyword “ERROR”.
The exact output is in the screenshot below; it displays only ERRORs.

Example 3: Extract Specific Information
Let’s say you want to extract the timestamp and error message from each log entry. Here’s how to do it using the script below.
# Define the path to the log file
$logPath = "C:\Logs\app.log"
# Read and extract timestamp and error message
Get-Content -Path $logPath | ForEach-Object {
if ($_ -match "(?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).*ERROR (?<message>.*)") {
[PSCustomObject]@{
Timestamp = $matches['timestamp']
Message = $matches['message']
}
}
}This script uses regular expressions to match and extract the timestamp and error message from each log entry, creating a custom object for each match.
Check out Log Error Messages to a File Using PowerShell Try Catch
Example 4: Export to CSV
You might want to export the filtered log entries to a CSV file for further analysis. Here’s how you can do it:
# Define the path to the log file and output CSV file
$logPath = "C:\Logs\app.log"
$outputCsv = "C:\Logs\filtered_errors.csv"
# Read, filter, and export to CSV
Get-Content -Path $logPath | ForEach-Object {
if ($_ -match "(?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).*ERROR (?<message>.*)") {
[PSCustomObject]@{
Timestamp = $matches['timestamp']
Message = $matches['message']
}
}
} | Export-Csv -Path $outputCsv -NoTypeInformationThis script reads the log file, filters for error messages, extracts the necessary information, and exports the results to a CSV file.
Here is the exact output in the screenshot below:

Check out How to Create a Log File in PowerShell?
PowerShell read log file into a variable
Now, let me show you how to read the contents of a log file into a variable and then perform various operations on it. We’ll use the sample log file app.log that we created earlier.
Step 1: Read the Log File into a Variable
First, let’s read the entire contents of the log file into a PowerShell variable.
# Define the path to the log file
$logPath = "C:\Logs\app.log"
# Read the contents of the log file into a variable
$logContent = Get-Content -Path $logPath
# Display the contents of the variable
$logContentIn this example:
$logPathstores the path to the log file.$logContentholds the contents of the log file, read using theGet-Contentcmdlet.- The contents of
$logContentare displayed to the console.
You can see the exact output in the screenshot below:

Step 2: Filter Log Entries for Errors
Next, let’s filter the log entries to find all error messages. We’ll use the variable $logContent that holds the log data.
# Filter log entries for error messages
$errorEntries = $logContent | Where-Object { $_ -match "ERROR" }
# Display the error entries
$errorEntriesHere, Where-Object is used to filter the log entries that contain the keyword “ERROR”. The filtered entries are stored in the $errorEntries variable and then displayed.
Conclusion
In this tutorial, I explained how to read log files in PowerShell and how to filter log entries, extract specific information, or export log data to Excel.
You may also like:
- PowerShell Read-Host to Enter Multiple Lines
- PowerShell Import-Csv Cmdlet
- PowerShell Export-CSV cmdlet
Bijay Kumar is an esteemed author and the mind behind PowerShellFAQs.com, where he shares his extensive knowledge and expertise in PowerShell, with a particular focus on SharePoint projects. Recognized for his contributions to the tech community, Bijay has been honored with the prestigious Microsoft MVP award. With over 15 years of experience in the software industry, he has a rich professional background, having worked with industry giants such as HP and TCS. His insights and guidance have made him a respected figure in the world of software development and administration. Read more.