Create custom object

Welcome Forums General PowerShell Q&A Create custom object

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

js
 
Participant
8 months ago.

  • Author
    Posts
  • #96095

    Participant
    Points: 25
    Rank: Member

    Hi,

    I'm trying to create a custom object that has values from three different variables.
    Imagine this scenario:

    Variable1 content:
    User1
    User2
    User3

    Variable2 content:
    User5
    User7
    User8

    Variable3 content:
    User10
    User12
    User20

    I want to create an object that is something like this:
    "Local Admins";"Remote Desktop";"Logons"
    User1;User5;User10
    User2;User7;User12
    User3;User8;User20

    Is there a way?

  • #96098

    Keymaster
    Points: 1,619
    Helping HandTeam Member
    Rank: Community Hero

    Of course.

    $props = @{ColumnA = $var.Value1
               ColumnB = $var.Value2}
    New-Object -Type PSObject -Prop $props
    

    That's the basic format. Do that for each row you want to produce. If you need the final result to be delimited with semicolons, as in your example, collect those rows into a variable and:

    $AllRows | ConvertTo-CSV -Delim ";"

    And you'll get a semicolon-delimited set.

    • #96102

      Participant
      Points: 25
      Rank: Member

      Don Jones,

      Wow, you're fast!
      But how can I do it when I don't know how many values are in those variables?
      For example: Variable1 can have 3 values, Variable2 can have 10 values and Variable3 can have 6 values...

  • #96104

    Keymaster
    Points: 1,619
    Helping HandTeam Member
    Rank: Community Hero

    Mmm, that's not really how objects work. Objects don't have variable numbers of properties. If your end goal is that example you provided, then that's not a good format for variable data. Meaning, if one machine can have multiple "Local Admins," PowerShell can represent that in an object, but it becomes hierarchical data. You can't represent hierarchical data in a flat file.

    Think of an Excel sheet. If you were to do this in an Excel sheet, how would you put multiple values into a single cell for "Local Admins" on one machine? Maybe you're thinking, "oh, I'd just do like commas between them," and that might be fine for you as a human, but it's a sucky data format for computers to deal with. That's why computers have relational databases instead of doing everything in CSV files or Excel sheets.

    So what's the end goal, here? What are you trying to get to?

    • #96174

      Participant
      Points: 25
      Rank: Member

      Don Jones and postanote,

      I need to create a report of users that are in the local Admins, Remote Desktop users and who logged on multiple servers.
      I was able to create a TXT with that information, but I was trying to create an HTML with that info side by side.
      Microsoft auditing reasons.
      But that's ok, I think I'll try to use an Excel file to output the data...
      I'll take a look at those sites postanote!

      Thanks for your time and attention!!!

  • #96128

    Participant
    Points: 206
    Helping Hand
    Rank: Participant

    Ditto to what DonJ stated here.

    Yet, you'd also might want to wrap you head around PoSH multi-dimensional arrays.

    See these discussions.

    Today I want to talk a little about multidimensional arrays in Windows Powershell. Multidimensional arrays are one of the complex data types supported by Powershell. They can be used to dynamically store information in a volatile table without having it written to a real database in a file on the disk.

    'happysysadm.com/2011/01/multidimensional-arrays-in-powershell.html'

    Easily Create and Manipulate an Array of Arrays in PowerShell
    'blogs.technet.microsoft.com/heyscriptingguy/2011/12/09/easily-create-and-manipulate-an-array-of-arrays-in-powershell'

    Comparing two multi-dimensional arrays
    'powershell.org/forums/topic/comparing-two-multi-dimensional-arrays'

  • #96182
    js

    Participant
    Points: 202
    Helping Hand
    Rank: Participant

    Hey Don, anything wrong with making objects this way?

    [pscustomobject]@{ColumnA = $var.Value1
                      ColumnB = $var.Value2}
    

The topic ‘Create custom object’ is closed to new replies.