feuerstein08
Goto Top

Variable Abfrage der Eventlogs mit Powershell 1.0

Ich verstehe den Unterschied nicht ... face-sad

Um Abfragen der Eventlogs flexibel zu gestalten, wollte ich die zu suchenden Events mittels einer Variable übergeben.

Beispiel:
get-eventlog -logname system | where-object {($_.Eventid -eq 6005)} | select Index, EventID, Source, Message

                        Index                       EventID Source                        Message
                        -----                       ------- ------                        -------
                         8824                          6005 EventLog                      The Event log service was ...
                         8693                          6005 EventLog                      The Event log service was ...
                         8550                          6005 EventLog                      The Event log service was ...
                         8413                          6005 EventLog                      The Event log service was ...
                         8169                          6005 EventLog                      The Event log service was ...
Packe ich die Abfrage in eine Variable und teste damit die Ausgabe, dann sieht das so aus:
$query = '($Eventid -eq 6005)'  
get-eventlog -logname system | where-object { $query } |select EventID, Source, Message

                        Index                       EventID Source                        Message
                        -----                       ------- ------                        -------
                         9028                          7036 Service Control Manager       The description for Event ...
                         9027                            19 Microsoft-Windows-WindowsU... The description for Event ...
                         9026                          7036 Service Control Manager       The description for Event ...
                         9025                          7036 Service Control Manager       The description for Event ...
                         9024                          7040 Service Control Manager       The description for Event ...
                         9023                          4383 Microsoft-Windows-Servicing   Windows Servicing complete...
                         9022                          4373 Microsoft-Windows-Servicing   Windows Servicing successf...
...
Warum, oder besser: wie kann ich die Abfrage korrekt mit meiner Variablen gestalten?

Für jede gute Idee ist Willkommen .. face-smile
Feuerstein08

Content-Key: 139928

Url: https://administrator.de/contentid/139928

Printed on: April 25, 2024 at 10:04 o'clock

Member: Snowman25
Snowman25 Apr 06, 2010 at 11:50:48 (UTC)
Goto Top
Hallo @Feuerstein08,

Reicht dir CSCRIPT EVENTQUERY.vbs <arguments> nicht?
Wenn du das Skript nicht hast (k.A. ob das von PS 1.0 kommt oder bei XP Pro schon dabei ist etc..) kann ich es dir gerne schicken.
Normalerweise befindet es sich in %windir%/System32

Greetz
Snow
Member: Feuerstein08
Feuerstein08 Apr 06, 2010 at 12:11:14 (UTC)
Goto Top
Hallo Snow,

danke für deine Antwort, aber das ist nicht das gesuchte ...

Ich möchte diesen Teil gerne mit Powershell lösen, da dies nur ein kleiner Teil eines größeren Powershell-Skripts ist.

... und ich möchte den Unterschied - das Problem verstehen face-wink ...

Feuerstein08
Member: Snowman25
Snowman25 Apr 06, 2010 at 12:42:41 (UTC)
Goto Top
Zitat von @Feuerstein08:
Beispiel:

get-eventlog -logname system | where-object {($_.Eventid -eq 6005)} | select Index, EventID, Source, Message
vergleiche dazu:
Zitat von @Feuerstein08:
$query = '($Eventid -eq 6005)'
get-eventlog -logname system | where-object { $query } |select EventID, Source, Message

Da fehlt ein _. vor Eventid, oder?
Member: Feuerstein08
Feuerstein08 Apr 06, 2010 at 13:52:13 (UTC)
Goto Top
Hallo Snow,

schade ... ich dachte du hättest den "blöden" Fehler gefunden. Leider ist dieser Fehler nur hier durch einen "Copy & Paste" Fehler reingekommen.

Du hast aber Recht, da gehört ein "_." rein. Aber auch damit bekomme ich die falsche Ausgabe:

$query = '($_.Eventid -eq 6005)'
get-eventlog -logname system | where-object { $query } |select EventID, Source, Message

EventID Source Message
------- ------ -------
7036 Service Control Manager The description for Event ID '107374...
7036 Service Control Manager The description for Event ID '107374...
7036 Service Control Manager The description for Event ID '107374...
10029 DCOM The description for Event ID '-10737...
Member: Snowman25
Snowman25 Apr 06, 2010 at 14:20:43 (UTC)
Goto Top
Hallo @Feuerstein08,
Habs jetzt mal ausprobiert..
Geschweifte Klammern um einen Text bewirken, dass der Inhalt NICHT ausgewertet wird. So steht bei der Ausführung eben immer noch where-object $query zwischen den Pipes.
Zwar könnte man die geschweiften Klammern auch in $query reinschreiben ($query= '{($_.Eventid-eq 6005)}'). Bringt aber nichts:
Zitat von powershell
PS U:\> get-eventlog -logname system|where-object $query|select Index, EventID, Source, Message
Where-Object : A parameter cannot be found that matches parameter name '{($_.Eventid -eq 6005)}'.
At line:1 char:42
+ get-eventlog -logname system|where-object <<<< $query|select Index, EventID, Source, Message

Kurz:
SO wird das nichts... aber da gibts sicherlich auch 'nen workaround.

Greetz
Snow
Member: Feuerstein08
Feuerstein08 Apr 07, 2010 at 10:07:23 (UTC)
Goto Top
Hallo Snow,

ich habe eine Lösung für das Problem erhalten.

Nachdem die $query zusammengebastelt ist, das ganze noch einmal "einpacken"?:

$sb = [ScriptBlock]::Create($query)

dann klappt auch die Where-Object Abfrage wieder:

get-eventlog -logname system | Where-Object $sb |select EventID, Source, Message

Was genau hinter diesem Befehl "$sb = [ScriptBlock]::Create($query)" steckt muss ich noch herausfinden (will ja schließlich auch was lernen face-wink )

Gruß
Feuerstein08
Member: Snowman25
Snowman25 Apr 07, 2010 at 10:13:02 (UTC)
Goto Top
Zitat von @Feuerstein08:
Hallo Snow,

ich habe eine Lösung für das Problem erhalten.

schön zu hören face-smile

Was genau hinter diesem Befehl "$sb = [ScriptBlock]::Create($query)" steckt muss ich noch herausfinden (will ja
schließlich auch was lernen face-wink )

Gute Frage. ich weiß selbst nicht, was das nun genau bewirkt... Bin nicht so der Powershell-Profi bzw. überhaupt so Powershellbenutzer. Aber ein paar debugging-skills und die Fähigkeit zu lesen hilft oft schon wunder face-big-smile

Gruß
Feuerstein08

Gruß
Snowman25