class Device { [string]$Brand [string]$Model [string]$VendorSku [string]ToString(){ return ("{0}|{1}|{2}" -f $this.Brand, $this.Model, $this.VendorSku) } } class Rack : Device { hidden [int] $Slots = 8 static [Rack[]]$InstalledRacks = @() [int]$Slots = 8 [string]$Brand [string]$Model [string]$VendorSku [string]$AssetId [Device[]]$Devices = [Device[]]::new($this.Slots) Device( [string]$b, [string]$m, [string]$vsk ){ $this.Brand = $b $this.Model = $m $this.VendorSku = $vsk } [void] AddDevice([Device]$dev, [int]$slot){ ## Add argument validation logic here $this.Devices[$slot] = $dev } [void]RemoveDevice([int]$slot){ ## Add argument validation logic here $this.Devices[$slot] = $null } [int[]] GetAvailableSlots(){ [int]$i = 0 return @($this.Devices.foreach{ if($_ -eq $null){$i}; $i++}) } } $rack = [Rack]::new() $surface = [Device]::new() $surface.Brand = "Microsoft" $surface.Model = "Surface Pro 4" $surface.VendorSku = "5072641000" $rack.AddDevice($surface, 2) $rack $rack.GetAvailableSlots()