Я использую команду пользовательских объектов Powershell для хранения точек данных. Пользовательский объект создает только один объект и присваивает ему переменную. Может ли Powershell пойти еще дальше и создать новые классы, из которых могут быть созданы объекты?
В приведенных ниже примерах хранятся три части данных: имя сервера, отметка времени и минуты с момента возникновения события на сервере.
Когда я изучал Powershell, я помещал все это в двумерный массив:
$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
export-csv не очень хорошо работает с массивами, поэтому я начал использовать пользовательский объект:
$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
Это экспортируется правильно, а свойства объекта проще, чем иметь дело с столбцами в двумерном массиве.
Но если я хочу создать несколько настраиваемых объектов, которые не находятся в массиве, мне придется писать код пользовательского объекта снова и снова.
$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
Что делать, если Powershell может создавать пользовательские классы в дополнение к настраиваемым объектам? Как говорят языки программирования OO? Что-то вроде:
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
Возможно ли это в Powershell?