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!