2015-01-28 1 views
4

Мы хотим проверить, существует ли журнал с определенным именем источника. Журнал создается следующим образом:Как проверить, существует ли журнал событий с определенным именем источника?

New-EventLog -LogName Application -Source "MyName" 

Теперь мы хотим использовать функцию PowerShell, чтобы проверить, существует ли этот журнал. Рабочим раствором является следующее:

[System.Diagnostics.EventLog]::SourceExists("MyName") -eq $false 

, который возвращает False, если журнал существует и имеет значение true, если это не так.

Как мы можем сделать этот код так, чтобы он использовал встроенные функции PowerShell вместо классов .NET? Мы попытались код из here:

$sourceExists = !(Get-EventLog -Log Application -Source "MyName") 

но она возвращает GetEventLogNoEntriesFound исключение.

Может кто-то помочь нам? Благодарю.

+1

Одной из сильных сторон PowerShell является доступностью .Net классов. Почему это не вариант или вам просто интересно? 'Get-EventLog' не поможет, поскольку вы не можете возвращать записи, но источник все еще может существовать. – Matt

+0

Я думаю, что лучше использовать только функции PowerShell. Я в основном хочу знать, как возвращенный список можно превратить в объект, который может быть нулевым или нет. Но Baybe функция SourceExists от .NET-класса - наш лучший выбор. –

+0

Что-то вроде этого тогда? '[bool] (Get-EventLog -Log Application -Source" MyName "-ErrorAction SilentlyContinue)'. Возвращает true или false. Источник все еще может существовать, но не имеет связанных журналов. – Matt

ответ

0

Вы можете обернуть, что в CMDlet следующим образом:

function Test-EventLog { 
    Param(
     [Parameter(Mandatory=$true)] 
     [string] $LogName 
    ) 

    [System.Diagnostics.EventLog]::SourceExists($LogName) 
} 

Примечание: Вам нужно будет запустить этот сценарий из привилегированной PowerShell консоли (Run как администратор) для его работы:

Test-EventLog "Application" 
True 
+0

Часть SourceExists - это то, что мы смотрим, это работало. Вопрос в том, была ли эквивалентная функция PowerShell. Возможно, нет, но с вашей идеей мы можем сделать это сами. –

+1

@ user2609980 Если командлет PowerShell существует, он, вероятно, будет делать тот же самый вызов. Обратите внимание, что для учетных записей, отличных от admin, 'SourceExists()' будет вызывать ошибку, потому что к журналу событий безопасности не удается получить доступ. –

+0

-1 Вопрос в том, как проверить, существует ли ** источник **.Этот ответ показывает, как проверить, существует ли событие ** журнал **. Текст * выше * «должен быть» правильный. Кроме того, для проверки наличия журнала событий нет необходимости. Это необходимо только при проверке наличия источника, и источник не может быть найден без проверки журнала событий безопасности. –

0

правильный путь, почти так же, как и выше:

function Test-EventLogSource { 
Param(
    [Parameter(Mandatory=$true)] 
    [string] $SourceName 
) 

[System.Diagnostics.EventLog]::SourceExists($SourceName) 
} 

Затем запустите:

Test-EventLogSource "MyApp" 
0

Там, кажется, некоторая путаница между EventLog и EventLogSource.

Вот мой пример: (с строгим режимом ON)

Смежные вопросы