Powershell Criar um arquivo de classe para armazenar objetos personalizados?

Eu uso o comando de objeto personalizado do Powershell para armazenar pontos de dados. O objeto personalizado cria apenas um objeto e atribui uma variável a ele. Pode o Powershell dar um passo além e criar novas classes a partir das quais objetos podem ser feitos?

Nos exemplos abaixo, eu armazeno três partes de dados: um nome de servidor, um registro de data e hora e os minutos desde que um evento ocorreu no servidor.

Quando eu estava aprendendo o Powershell, coloquei tudo isso em uma matriz bidimensional:

$record = @("Server","Timestamp","Minutes")
for ($j = 0; $j -lt 10; $j++){
    $record += @("Server1","$(get-date)",$j)
    sleep 60
    }
$record | export-csv -path c:\record.csv -no type information

O export-csv não funciona bem com arrays, então comecei a usar um objeto personalizado:

$record = @()
for ($j = 0; $j -lt 10; $j++){
    $r = New-Object -TypeName PSObject
    $r | Add-Member -MemberType NoteProperty -Name Server -Value ""
    $r | Add-Member -MemberType NoteProperty -Name Timesteamp -Value ""
    $r | Add-Member -MemberType NoteProperty -Name Minutes -Value ""
    $r.server = "Server1"
    $r.timestamp = "$(get-date)"
    $r.minutes = "$j"
    $record += $r
    sleep 60
    }
$record | export-csv -path c:\record.csv -no type information

Isso é exportações corretamente, e lidar com propriedades de objetos é mais fácil do que lidar com colunas em uma matriz bidimensional.

Mas, se eu quiser criar vários objetos personalizados que não estejam em uma matriz, preciso escrever o código de objeto personalizado repetidas vezes.

$server1 = New-Object -TypeName PSObject
$server1 | Add-Member -MemberType NoteProperty -Name Server -Value ""
$server1 | Add-Member -MemberType NoteProperty -Name Timesteamp -Value ""
$server2 = New-Object -TypeName PSObject
$server2 | Add-Member -MemberType NoteProperty -Name Server -Value ""
$server2 | Add-Member -MemberType NoteProperty -Name Timesteamp -Value ""
#ad nauseum

E se o Powershell pudesse projetarclasses além de costumeobjetos? Como as linguagens de programação OO fazem? Algo como:

class record {
    -MemberType NoteProperty -Name Server -Value ""
    -MemberType NoteProperty -Name Timestamp -Value ""
    -MemberType NoteProperty -Name Minutes -Value ""
    }
$server1 = new-object -TypeName record
$server2 = new-object -TypeName record
$server3 = new-object -TypeName record

Isso é possível em Powershell?

questionAnswers(3)

yourAnswerToTheQuestion