powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ошибка приведения
9 сообщений из 9, страница 1 из 1
Ошибка приведения
    #39733593
Фотография Bimon Subio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, почем следующий код на последней строке выдает ошибку приведения типа, хотя в отладчике в динамическом View
показывает тип объекта E_ как раз System.Diagnostics.EventLogEntry

Код: vbnet
1.
2.
3.
4.
Dim Result = Cmd.Invoke()
For Each E In Result.Where(Function(E_)
        Dim PSO As System.Management.Automation.PSObject = E_
        Dim ELE As System.Diagnostics.EventLogEntry = CObj(PSO)


Модератор: Учимся использовать тэги оформления кода - FAQ


И пример из интернета тоже совершает некие пляски с динамическим объектом вместо конверсии:
https://stackoverflow.com/questions/20941479/dealing-with-get-eventlog-and-time-zones-from-c-sharp
...
Рейтинг: 0 / 0
Ошибка приведения
    #39733600
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For Each E In Result.Where(Function(E_)

скобки не хватает... или я не шарю в барсике, лет 15 на нём не программировал
...
Рейтинг: 0 / 0
Ошибка приведения
    #39733604
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesFor Each E In Result.Where(Function(E_)

скобки не хватает... или я не шарю в барсике, лет 15 на нём не программировалон просто полностью не привел код - скобка дальше, когда тело функции закончится
...
Рейтинг: 0 / 0
Ошибка приведения
    #39733607
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bimon Subio
Код: vbnet
1.
CObj(PSO)

Я тоже в VB.NET не шарю, но разве это не приведение к Object? Если так, то правильно выдается несоответствие типов.
...
Рейтинг: 0 / 0
Ошибка приведения
    #39733611
Фотография Bimon Subio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так тоже не работает:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Function TestPowerShell()
        Using Cmd As PowerShell = PowerShell.Create().AddCommand("get-eventlog")

            'cmd.RunspacePool = pool
            Cmd.AddParameter("-LogName", "System")
            'Cmd.AddParameter("-After", after)

            Dim Result = Cmd.Invoke()
            For Each E In Result.Where(Function(E_)
                                           Dim PSO As System.Management.Automation.PSObject = E_
                                           'Dim ELE As System.Diagnostics.EventLogEntry = CObj(PSO)
                                           Dim T As Type = GetType(System.Diagnostics.EventLogEntry)
                                           Dim ELE As System.Diagnostics.EventLogEntry = CTypeDynamic(PSO, T)
                                           Dim H = CObj(E_).TimeGenerated.Hour
                                           Dim EventID = CObj(E_).EventID
                                           Return Not IsNothing(E_.Properties) And
                                                E_.Properties.Any() And
                                                EventID = 4798 And
                                                0 < H And H < 7
                                       End Function)
                Debug.WriteLine(CObj(E).Message)
            Next
        End Using



Что я делаю не так? Как извлечь свойства события типа время его возникновения и почему не приводятся типы?
...
Рейтинг: 0 / 0
Ошибка приведения
    #39733615
Фотография Bimon Subio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При попытке кастинга компилятором, а не виртуалкой ессно происходит такая же ошибка приведения.

Как так может быть, чтобы DynamicView в отладчике показывал тип, к которому не удается привести?
Маразм какой-то...
...
Рейтинг: 0 / 0
Ошибка приведения
    #39733781
Фотография Bimon Subio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот так работает:
Dim ELE As EventLogEntry = E_.BaseObject

Что это за чудеса?
...
Рейтинг: 0 / 0
Ошибка приведения
    #39734369
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Bimon SubioА вот так работает:
Dim ELE As EventLogEntry = E_.BaseObject

Что это за чудеса?
Никаких чудес нет. Вы получили PSObject, привели его к EventLogEntry и смогли использовать свойства и методы EventLogEntry. У PSObject их нет.

Однако написанное Вами - плохая практика. Команда PowerShell должна быть построена так, что бы на выходе получались строки.

Например.
Вы делаете
Код: powershell
1.
Get-EventLog -LogName System


получаете PSObject и пытаетесь его обработать.
Надо примерно так
Код: powershell
1.
2.
Get-EventLog -LogName System |  Where-Object {($_.EventID -eq 1)  -and (([DateTime]($_.TimeGenerated)).Hour -eq 14) }`
 | Select-Object -Property Message, EntryType  | format-list


Тогда
Код: vbnet
1.
Dim Result = Cmd.Invoke()

вернет массив строк.
Разумеется у меня только пример. Критерии отбора ($_.EventID -eq 1) -and (([DateTime]($_.TimeGenerated)).Hour -eq 14)) и то, что надо выводить (-Property Message, EntryType) - на Ваше усмотрение
...
Рейтинг: 0 / 0
Ошибка приведения
    #39734371
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ах да.
Код: powershell
1.
Get-EventLog -LogName System 

тянет весь лог в оперативку. Особенно это приятно, когда лог нужен с другой машины
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ошибка приведения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]