none
Ausgabe einzelner Werte des "Replacementstrings" eines Events RRS feed

  • Frage

  • Hallo zusammen,

    meine derzeitige Herausforderung ist es, dass ich gerne die Events der gesperrten Konten in der AD ausgeben möchte. Hierzu mache ich folgendes (aus Vereinfachungsgründen nur mit dem letzten Ereignis).

    # Alle Domänencontroller in der Domäne
    $LocalDCs = ([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).DomainControllers.Name
    
    # erstmal nur das letzte Event
    Get-EventLog -ComputerName $LocalDCs -LogName Security -InstanceID "4740" -newest 1 |
        Select-Object MachineName, EventID, Source, TimeGenerated, Replacementstrings

    Soweit funktioniert das, als Ergebnis erhalte ich

    MachineName        : dc01.lab.dom
    EventID            : 4740
    Source             : Microsoft-Windows-Security-Auditing
    TimeGenerated      : 27.11.2012 09:34:26
    ReplacementStrings : {user.albert, VM-LAB-CL1, S-1-5-21-287256587-918758407-1540833222-5839, S-1-5-18...}

    Nun möchte ich die ersten zwei Werte des "Replacementstrings" ausgeben, anstatt des kompletten Inhalt des Arrays.

    Die Idee:

    Get-EventLog -ComputerName $LocalDCs -LogName Security -InstanceID "4740" -newest 1 |
        Select-Object MachineName, EventID, Source, TimeGenerated, Replacementstrings[0,1]

    Was allerdings mit einer Fehlermeldung abgebrochen wird

    "Select-Object : Das angegebene Platzhaltermuster ist ungültig: Replacementstrings[0..."

    Die Eingabe "Replacementstrings[0] oder [1]" führt auch nicht zum Ziel, da bleiben die Felder Leer.

    Ich vermute, dass das Array in der Select-Object Anweisung nicht aufgelöst werden kann. Kennt Ihr einen Weg dies zu tun?

    Danke im Voraus für eure Mühen


    Gruß Alex


    Dienstag, 27. November 2012 18:57

Antworten

  • Ungetestet:

    Get-EventLog -ComputerName $LocalDCs -LogName Security -InstanceID "4740" -newest 1 |

    Select-Object MachineName, EventID, Source, TimeGenerated, Replacementstrings[0],Replacementstrings[1]

    Select -Object erstellt ein Objekt jedes Attribut das Select-Object auswählt ist dann ein Property des neuen Objektes.
    Deshalb ist es sinnvoll den Properties in deinem Objekt einen eindeutigen Namen zu geben.
    Wenn du das sauber mit Namen machen willst geht das so:

    Get-EventLog -ComputerName $LocalDCs -LogName Security -InstanceID "4740" -newest 1 |
        Select-Object MachineName, EventID, Source, TimeGenerated, @{Name='User';Expression={$_.Replacementstrings[0]}},@{Name='ComputerName';Expression={$_.Replacementstrings[1]}}

    Die Expression ist ein Scriptblock, das heißt, du kannst da ein ganzes Skript reinhauen ;-)


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!




    Mittwoch, 28. November 2012 06:14

Alle Antworten

  • Ungetestet:

    Get-EventLog -ComputerName $LocalDCs -LogName Security -InstanceID "4740" -newest 1 |

    Select-Object MachineName, EventID, Source, TimeGenerated, Replacementstrings[0],Replacementstrings[1]

    Select -Object erstellt ein Objekt jedes Attribut das Select-Object auswählt ist dann ein Property des neuen Objektes.
    Deshalb ist es sinnvoll den Properties in deinem Objekt einen eindeutigen Namen zu geben.
    Wenn du das sauber mit Namen machen willst geht das so:

    Get-EventLog -ComputerName $LocalDCs -LogName Security -InstanceID "4740" -newest 1 |
        Select-Object MachineName, EventID, Source, TimeGenerated, @{Name='User';Expression={$_.Replacementstrings[0]}},@{Name='ComputerName';Expression={$_.Replacementstrings[1]}}

    Die Expression ist ein Scriptblock, das heißt, du kannst da ein ganzes Skript reinhauen ;-)


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!




    Mittwoch, 28. November 2012 06:14
  • Hallo,

    das war der richtige Hinweis, der mich zur Lösung geführt hat. In Deinem Vorschlag fehlten nur noch bei den Expression das $_ -> dann funktioniert es.

    Get-EventLog -ComputerName $LocalDCs -LogName Security -InstanceID "4740" -newest 1 |
        Select-Object MachineName, EventID, Source, TimeGenerated, @{Name='User';Expression={$_.Replacementstrings[0]}},@{Name='ComputerName';Expression={$_.Replacementstrings[1]}}

    Klasse Danke


    Gruß Alex


    Mittwoch, 28. November 2012 08:59
  • Hallo,

    das war der richtige Hinweis, der mich zur Lösung geführt hat. In Deinem Vorschlag fehlten nur noch bei den Expression das $_ -> dann funktioniert es.

    Ach ja stimmt ! Sorry! Ich habe es in der Antwort verbessert.

    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Mittwoch, 28. November 2012 10:03