I'm using the following line to create a new event log
new-eventlog -LogName "Visual Studio Builds" -Source "Visual Studio"
I want to run this every time, because if I run a build from a new computer, I'd still like to see the event logs.
The problem is that every time the script is run after the log is already created, it throws an error.
New-EventLog : The "Visual Studio" source is already registered on the "localhost" computer. At E:\Projects\MyApp\bootstrap.ps1:14 char:13 + new-eventlog <<<< -LogName "Visual Studio Builds" -Source "Visual Studio" + CategoryInfo : InvalidOperation: (:) [New-EventLog], InvalidOperationException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.NewEventLogCommand
Now I know that I can "search" for the event log
Get-EventLog -list | Where-Object {$_.logdisplayname -eq "Visual Studio Builds"}
But now how do I determine if it exists?
The Get-EventLog cmdlet gets events and event logs from local and remote computers. By default, Get-EventLog gets logs from the local computer. To get logs from remote computers, use the ComputerName parameter. You can use the Get-EventLog parameters and property values to search for events.
The event source indicates what logs the event. It is often the name of the application, or the name of a subcomponent of the application, if the application is large. Applications and services should write to the Application log or a custom log. Device drivers should write to the System log.
The Remove-EventLog cmdlet deletes an event log file from a local or remote computer and unregisters all its event sources for the log.
You can use the static members of EventLog to delete logs, get log lists, create or delete a source, or determine if a computer already contains a particular source. There are three default event logs: Application, System, and Security.
# Check if Log exists # Ref: http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.exists(v=vs.110).aspx [System.Diagnostics.EventLog]::Exists('Application'); # Ref: http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.sourceexists(v=vs.110).aspx # Check if Source exists [System.Diagnostics.EventLog]::SourceExists("YourLogSource");
So I was on the right path with Get-EventLog
.
Instead of just reading it, I stored it in a variable. Then I checked if the variable was null
.
This has achieved what I was looking to do.
$logFileExists = Get-EventLog -list | Where-Object {$_.logdisplayname -eq "Visual Studio Builds"} if (! $logFileExists) { New-EventLog -LogName "Visual Studio Builds" -Source "Visual Studio" }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With