Skip to main content

Reading and Resolving PowerShell Errors - Part 6

This is part 6 of my series of the most common PowerShell errors that are made in my PowerShell classes.  I will be posting one a day to help you understand why an error occurred and what the error’s meaning is.

Today’s error: Table columns are empty of property values

Here is our starting code:
Get-EventLog -LogName Security -Newest 5 |
    Select-Object -Property Name, InstanceID, Timewritten

And here is the full error:

Name                                                 InstanceId TimeWritten                   
----                                                 ---------- -----------                   
                                                           4634 12/10/2015 10:03:45 AM        
                                                           4624 12/10/2015 10:03:45 AM        
                                                           4672 12/10/2015 10:03:45 AM        
                                                           4634 12/10/2015 10:03:25 AM        
                                                           4624 12/10/2015 10:03:25 AM        


No error message is provided, but we can see that the Name property is empty.

Resolution:
Discover the true name of the property.

Many times in my classes, my students make an assumption about the name of an objects property.  When they do, they produce output with missing data.  Always pipe your objects to Get-Member so you can see the actual property names to use.
Get-EventLog -LogName Security -Newest 5 | GM

    TypeName: System.Diagnostics.EventLogEntry#Security/Microsoft-Windows-Security-Auditing/4672

Name                      MemberType     Definition                                           
----                      ----------     ----------                                           
Disposed                  Event          System.EventHandler Disposed(System.Object, System....
CreateObjRef              Method         System.Runtime.Remoting.ObjRef CreateObjRef(type re...
Dispose                   Method         void Dispose(), void IDisposable.Dispose()           
Equals                    Method         bool Equals(System.Diagnostics.EventLogEntry otherE...
GetHashCode               Method         int GetHashCode()                                    
GetLifetimeService        Method         System.Object GetLifetimeService()                   
GetObjectData             Method         void ISerializable.GetObjectData(System.Runtime.Ser...
GetType                   Method         type GetType()                                       
InitializeLifetimeService Method         System.Object InitializeLifetimeService()            
ToString                  Method         string ToString()                                    
Category                  Property       string Category {get;}                               
CategoryNumber            Property       int16 CategoryNumber {get;}                          
Container                 Property       System.ComponentModel.IContainer Container {get;}    
Data                      Property       byte[] Data {get;}                                    
EntryType                 Property       System.Diagnostics.EventLogEntryType EntryType {get;}
Index                     Property       int Index {get;}                                     
InstanceId                Property       long InstanceId {get;}                               
MachineName               Property       string MachineName {get;}                            
Message                   Property       string Message {get;}                                
ReplacementStrings        Property       string[] ReplacementStrings {get;}                   
Site                      Property       System.ComponentModel.ISite Site {get;set;}          
Source                    Property       string Source {get;}                                  
TimeGenerated             Property       datetime TimeGenerated {get;}                        
TimeWritten               Property       datetime TimeWritten {get;}                          
UserName                  Property       string UserName {get;}                               
EventID                   ScriptProperty System.Object EventID {get=$this.get_EventID() -ban...


If you need to see the values of the properties to help you decide which one to use, pipe a single object to Select *.
Get-EventLog -LogName Security -Newest 1 |
    Select *

EventID            : 4634
MachineName        : DC.PowerIT.com
Data               : {}
Index              : 428365
Category           : (12545)
CategoryNumber     : 12545
EntryType          : SuccessAudit
Message            : An account was logged off.
                    
                     Subject:
                         Security ID:        S-1-5-18
                         Account Name:        DC$
                         Account Domain:        POWERIT
                         Logon ID:        0x21bc1a
                    
                     Logon Type:            3
                     
                     This event is generated when a logon session is destroyed. It may be
                     positively correlated with a logon event using the Logon ID value. Logon
                     IDs are only unique between reboots on the same computer.
Source             : Microsoft-Windows-Security-Auditing
ReplacementStrings : {S-1-5-18, DC$, POWERIT, 0x21bc1a...}
InstanceId         : 4634
TimeGenerated      : 12/10/2015 10:07:45 AM
TimeWritten        : 12/10/2015 10:07:45 AM
UserName           :
Site               :
Container          : 

Once you discover the correct property name, then change your code
Get-EventLog -LogName Security -Newest 5 |
    Select-Object -Property Source, InstanceID, Timewritten 
Source                                               InstanceId TimeWritten                   
------                                               ---------- -----------                   
Microsoft-Windows-Security-A...                            4634 12/10/2015 10:06:45 AM        
Microsoft-Windows-Security-A...                            4624 12/10/2015 10:06:45 AM        
Microsoft-Windows-Security-A...                            4672 12/10/2015 10:06:45 AM        
Microsoft-Windows-Security-A...                            4634 12/10/2015 10:06:28 AM        
Microsoft-Windows-Security-A...                            4624 12/10/2015 10:06:28 AM        



Comments

Popular posts from this blog

Adding a Comment to a GPO with PowerShell

As I'm writing this article, I'm also writing a customization for a PowerShell course I'm teaching next week in Phoenix.  This customization deals with Group Policy and PowerShell.  For those of you who attend my classes may already know this, but I sit their and try to ask the questions to myself that others may ask as I present the material.  I finished up my customization a few hours ago and then I realized that I did not add in how to put a comment on a GPO.  This is a feature that many Group Policy Administrators may not be aware of. This past summer I attended a presentation at TechEd on Group Policy.  One organization in the crowd had over 5,000 Group Policies.  In an environment like that, the comment section can be priceless.  I always like to write in the comment section why I created the policy so I know its purpose next week after I've completed 50 other tasks and can't remember what I did 5 minutes ago. In the Group Policy module for PowerShell V3, th

Return duplicate values from a collection with PowerShell

If you have a collection of objects and you want to remove any duplicate items, it is fairly simple. # Create a collection with duplicate values $Set1 = 1 , 1 , 2 , 2 , 3 , 4 , 5 , 6 , 7 , 1 , 2   # Remove the duplicate values. $Set1 | Select-Object -Unique 1 2 3 4 5 6 7 What if you want only the duplicate values and nothing else? # Create a collection with duplicate values $Set1 = 1 , 1 , 2 , 2 , 3 , 4 , 5 , 6 , 7 , 1 , 2   #Create a second collection with duplicate values removed. $Set2 = $Set1 | Select-Object -Unique   # Return only the duplicate values. ( Compare-Object -ReferenceObject $Set2 -DifferenceObject $Set1 ) . InputObject | Select-Object – Unique 1 2 This works with objects as well as numbers.  The first command creates a collection with 2 duplicates of both 1 and 2.   The second command creates another collection with the duplicates filtered out.  The Compare-Object cmdlet will first find items that are diffe

How to list all the AD LDS instances on a server

AD LDS allows you to provide directory services to applications that are free of the confines of Active Directory.  To list all the AD LDS instances on a server, follow this procedure: Log into the server in question Open a command prompt. Type dsdbutil and press Enter Type List Instances and press Enter . You will receive a list of the instance name, both the LDAP and SSL port numbers, the location of the database, and its status.