Do Your Own Thing - Creating a New Object from Scratch in Powershell V1 to Populate and have your Script Output a nice Object Instead of just Strings

I use PSObject all the time. Now when I write scripts I nearly always output an object and unless I can just add to an existing type that is close, I create my own. I copied from one of my recent ones below to show how I do it. Now this isn’t a complete script. $arrobjects would obvisouly be full of object that have the properties I used. You can though see how I build up the object to be used as the “template”, give it null properties, then each time through the loop use that template to create a temp object with that instances actual value. Then I simply put that object into a new array which will be the final output of this code…an array of my custom objects. I hope this is useful to you.

 

#We want this script to output a real, useful object, so lets create a template object to use to create out result

#objects to add to our array result

$objTemplateObject = New-Object psobject

$objTemplateObject | Add-Member -MemberType NoteProperty -Name EffectiveDate -Value $null

$objTemplateObject | Add-Member -MemberType NoteProperty -Name FullPath -Value $null

$objTemplateObject | Add-Member -MemberType NoteProperty -Name Name -Value $null

$objTemplateObject | Add-Member -MemberType NoteProperty -Name FileDateLastModified -Value $null

 

#Create the Blank array which will ultimately become the output object

$objResult = @()

 

 

foreach($objcurrent in $arrobjects)

{

#create an instance of our new object to prepare it with data and later add it to the result array

#The select-object changes the object from a ref to a value..there is likely a better way to do this, but this works only because I am already using a PSObject which is what this will produce.

$objTemp = $objTemplateObject | Select-Object *

    

#lets now populate our custom properties

$objTemp.Name = $objcurrent.Name

$objTemp.FullPath = $objcurrent.FullName

$objTemp.FileDateLastModified = $objcurrent.LastWriteTime

$objTemp.EffectiveDate = $dtmDateTaken

 

    

#Our temp object is ready, lets add it to our output array and get ready to loop back around

$objResult += $objTemp

}

 

$objResult

 

 

This posting is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified at https://www.microsoft.com/info/cpyright.htm.

Comments

  • Anonymous
    October 29, 2010
    Thank you so much! Just like you I want my output to be in an object. I tried to write directly to, what would be in your script, $objTemplateObject but kept getting errors. By doing it exactly like you did it finally works, after 2 hours of trial and error.

  • Anonymous
    September 19, 2014
    Thank you very much. Glad that I found this thumbs up