Add Stored Variable Value to Event Log Message

Welcome Forums General PowerShell Q&A Add Stored Variable Value to Event Log Message

This topic contains 4 replies, has 3 voices, and was last updated by

 
Participant
11 months, 2 weeks ago.

  • Author
    Posts
  • #90302

    Participant
    Points: 22
    Rank: Member

    I'm trying to add a value that is stored as a variable to the -Message parameter when using Write-EventLog. I'm not quite understanding my the variable isn't displaying when the message is written. This variable does contain a value and displays fine when using Write-Host. Am I missing a silly formatting rule here?

  • #90311

    Participant
    Points: 320
    Helping Hand
    Rank: Contributor

    Based on what you posted, this code should error out. As your final If statement denotes errors.

    The PoSH ISE pops up errors

    Missing '= ' operator after key in hash literal
    The hash literal was incomplete.
    Duplicate Keys 'if' not allowed in hash literals

    Both the Write-EventLog cmdlets in that if statement, are reflected as non-functional. Meaning the PoSH syntax color codeing shows they are in error.

    If you look at you code, you do not close the first hashtable block.
    This ...

    $MyEventWarn = @{
        LogName='Application';
        Source='QAS';
        EventID='56789';
        EntryType='Warning';
        Message="QAS data will expire soon and requires an update. Days remaining:$num" 
        #This doesn't write the value
    $MyEventInfo = @{
        LogName='Application';
        Source='QAS';
        EventID='56788';
        EntryType='Information';
        Message="QAS data is current. No remediation required at this time. Days remaining:$num" 
        #This doesn't write the value
    }
    

    Vs this..

    $MyEventWarn = @{
        LogName='Application';
        Source='QAS';
        EventID='56789';
        EntryType='Warning';
        Message="QAS data will expire soon and requires an update. Days remaining:$num" 
        }
    
    $MyEventInfo = @{
        LogName='Application';
        Source='QAS';
        EventID='56788';
        EntryType='Information';
        Message="QAS data is current. No remediation required at this time. Days remaining:$num" 
    }
    
    
    
    • #90334

      Participant
      Points: 22
      Rank: Member

      There's a copy paste error there. The source has the correct syntax. Even when I view this in VScode, using the normal variable syntax doesn't seem to work when placed in the Message array entry. I'm stumped.

  • #90349

    Participant
    Points: 263
    Helping Hand
    Rank: Contributor

    Am I wrong or do you use the variable before filling it? This way it should work actually:

    # Variable containing extracted data for analysis
    $data = Select-String -Pattern "Data Expiry" -Path $LogPath\$Log | ForEach-Object {$_.Line}
    
    # Create substring data by trimming the excess info. We just need the number of days.
    $start = $data.IndexOf(':') + 1
    $end   = $data.IndexOf("days")
    $length = $end - $start
    [int]$num = $data.Substring($start,$length).TrimStart(" ")
    
    # Splatting technique used here to pre-define the events that will be written to the systems Application Log
    $MyEventWarn = @{
        LogName='Application';
        Source='QAS';
        EventID='56789';
        EntryType='Warning';
        Message="QAS data will expire soon and requires an update. Days remaining: $num" #This doesn't write the value
    }
    $MyEventInfo = @{
        LogName='Application';
        Source='QAS';
        EventID='56788';
        EntryType='Information';
        Message="QAS data is current. No remediation required at this time. Days remaining: $num" #This doesn't write the value
    }
    
    # Once the value is known, we have to decide which message to write to the event log so that System Center
    # can pick up the entry and perform remediation tasks.
    if ($num -le 10) {
        Write-EventLog @MyEventWarn
    }
    else {
        Write-EventLog @MyEventInfo
    }
    • #90356

      Participant
      Points: 22
      Rank: Member

      I don't use the variable anywhere else other than the splatting arrays but if this is just a matter of where I have declared my splatting array, I will feel pretty silly.
      I typically put all that type of info (splats, static variables) at the very top of my script so it makes for easier editing by others on my team. I'll re-arrange the splatting and re-test.

      [UPDATE]
      Yeah now I feel silly. Took your suggestion and moved the splatting arrays to just after when $num is declared and it worked. Thank you!

The topic ‘Add Stored Variable Value to Event Log Message’ is closed to new replies.