I found that I could use classes in PowerShell similar to how I use them in C#. I instantly wanted to play with this and I thought I would share this as well.
To create a class in PowerShell, it’s as simple as:
#Person class class PersonClass{ [String]$Name [Int]$Age }
This allows a “Person” to be created that has the attributed of a name and an age. Simple stuff.
Say I wanted to have a bunch of these “Person”s in a list, a “People” list if you will. Then I could do something like this:
#Creating a list to hold the people using the PersonClass $People = New-Object 'System.Collections.Generic.List[PSObject]' #Creating a new person $newPerson = [PersonClass]::new() $newPerson.Name = "Roy Orbison" $newPerson.Age = "24" #Adding the new person to the people list $People.Add($newPerson)
What if I wanted to add something like a “Pets” attribute onto the person? Well, I could create a new class to hold a framework for each pet and create a new list attribute in the PersonClass. Here is my PetClass:
#Pet class class PetClass{ [String]$Name [Int]$Age [String]$Color }
And here is how I add it to my PersonClass so that I can have a list of pets for each user:
#Person class class PersonClass{<br> [String]$Name [Int]$Age [PetClass[]]$Pets }
Now its really simple to create a list of people with a list of any pets that they might have. Stitching this all together, it looks like this:
#Person class class PersonClass{ [String]$Name [Int]$Age [PetClass[]]$Pets } #Pet class class PetClass{ [String]$Name [Int]$Age [String]$Color } #Creating a list to hold the people using the PersonClass $People = New-Object 'System.Collections.Generic.List[PSObject]' #Creating a new person $newPerson = [PersonClass]::new() $newPerson.Name = "Roy Orbison" $newPerson.Age = "24" #Adding pets to the new person for ($i = 0; $i -le 5; $i++){ $newPet = [PetClass]::new() $newPet.Name = $i $newPet.Age = $i + 2 $newPet.Color = "Brown" #Adding the pet to the new person $newPerson.Pets += $newPet } #Adding the new person to the people list $People.Add($newPerson)
Above you can see that I have created a new person called “Roy Orbison” with an age of “24” and I have added five pets. The pet names and age aren’t really accurate but it’s good enough for this demonstration.
Continuing from this, I could add as many users as I want or even create new classes to add extra framework information for existing classes.
Searching this information isn’t as straight forward in PowerShell as it is in C# but it’s still quite easy. You can see how I get a list of all the pets that Roy Orbison has below:
$People | Where-Object {$_.Name -eq "Roy Orbison"} | Select-Object -ExpandProperty Pets
Upon finishing this, I realised that it would have been much more appropriate to do the users and albums, instead of pets. But I’m far too lazy to change what I already have…
Enjoy!