如何从命令行创建 WindowsEventLog 源?

我正在创建一个 ASP.NET 应用程序,它将把一些东西记录到 Windows EventLog。为此,必须首先创建事件源。这需要管理特权,所以我不能在 ASP.NET 应用程序中做到这一点。

是否有一个现有的控制台应用与 Windows 绑定,可以创建一个事件日志源,或者我必须推出自己的?

271655 次浏览

或者直接使用命令行命令:

创造事件

试试“ eventcreate.exe”

举个例子:

eventcreate /ID 1 /L APPLICATION /T INFORMATION  /SO MYEVENTSOURCE /D "My first log"

这将在 APPLICATION事件 木头下创建一个名为 MYEVENTSOURCE的新事件 来源,作为 INFORMATION事件 类型

我认为这个实用程序只包括从 XP 开始。

进一步阅读

  • Windows IT 专业版: JSI Tip 5487 Windows XP 包含用于创建自定义事件的 EventCreate 工具。

  • 在 CMD 提示符中键入 eventcreate /?

  • 返回文章页面 Windows 命令行参考 TechNet: http://technet.microsoft.com/en-us/library/cc755240译者:

  • SS64: Windows 命令行参考: < a href = “ http://SS64.com/nt/Eventcreate.html”rel = “ norefrer”> Eventcreate

Eventcreate2 允许创建自定义日志,而 创造事件不允许。

你也可以通过以下命令使用 Windows PowerShell:

if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
[System.Diagnostics.EventLog]::CreateEventSource($source, "Application")
}

在调用 CreateEventSource 之前,请确保检查源不存在,否则它将引发异常。

更多信息:

试试 PowerShell 2.0的 EventLog cmdlets

在 PowerShell 2.0及以上版本中引入以下内容:

  • 运行 New-EventLog一次以注册事件源:

    New-EventLog -LogName Application -Source MyApp
    
  • Then use Write-EventLog to write to the log:

    Write-EventLog
    -LogName Application
    -Source MyApp
    -EntryType Error
    -Message "Immunity to iocaine powder not detected, dying now"
    -EventId 1
    

您可以使用 Diagnostics.Event 日志类创建自己的自定义事件。 打开一个 Windows 应用程序,单击一个按钮执行下列代码。

System.Diagnostics.EventLog.CreateEventSource("ApplicationName", "MyNewLog");

“ MyNewLog”意味着您希望为日志事件查看器指定的名称。

要了解更多信息,请点击这个链接 [ http://msdn.microsoft.com/en-in/library/49dwckkz% 28v = vs. 90% 29.aspx% 5d”rel = “ nofollow”> http://msdn.microsoft.com/en-in/library/49dwckkz%28v=vs.90%29.aspx ]

但是,当您想要定义一个大于1000的 eventID 时,cmd/batch 版本可以正常工作,您可能会遇到一个问题。对于 event ID 为1000 + 的事件创建,我将使用 Powershell 如下:

$evt=new-object System.Diagnostics.Eventlog(“Define Logbook”)
$evt.Source=”Define Source”
$evtNumber=Define Eventnumber
$evtDescription=”Define description”
$infoevent=[System.Diagnostics.EventLogEntryType]::Define error level
$evt.WriteEntry($evtDescription,$infoevent,$evtNumber)

样本:

$evt=new-object System.Diagnostics.Eventlog(“System”)
$evt.Source=”Tcpip”
$evtNumber=4227
$evtDescription=”This is a Test Event”
$infoevent=[System.Diagnostics.EventLogEntryType]::Warning
$evt.WriteEntry($evtDescription,$infoevent,$evtNumber)

如果有人感兴趣,也可以通过添加一些注册表值手动创建事件源。

将以下行保存为. reg 文件,然后双击它将其导入到注册表中:

Windows Registry Editor Version 5.00


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\YOUR_EVENT_SOURCE_NAME_GOES_HERE]
"EventMessageFile"="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\EventLogMessages.dll"
"TypesSupported"=dword:00000007

这将创建一个名为 YOUR_EVENT_SOURCE_NAME_GOES_HERE的事件源。

PowerShell 7

这个答案 在5.x 中很管用,但在7.x 中就不行了。经过一番调查,我得到了以下工作:

Import-Module Microsoft.PowerShell.Management -UseWindowsPowerShell
New-EventLog -LogName Application -Source MyApp

我偶然发现了导入 通过这个 SO 答案的模块。显然,有一个适用于 Windows 的 您可以导入的一组模块仅 cmdlet 的取决于您的需要。我还在尝试根据您的 cmdlet 算出 如何确定要导入哪个模块