电源外壳.创建一个类文件来保存自定义对象? [英] Powershell. Create a class file to hold Custom Objects?

查看:39
本文介绍了电源外壳.创建一个类文件来保存自定义对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 Powershell 的自定义对象命令来保存数据点.自定义对象只创建一个对象并为其分配一个变量.Powershell 是否可以更进一步,创建可以创建对象的新类?

I use Powershell's custom-object command to hold data points. Custom-object creates just one object and assigns a variable to it. Can Powershell go one step further and create new classes from which objects can be made?

在下面的示例中,我存储了三段数据:服务器名称、时间戳和服务器上发生事件后的分钟数.

In the examples below, I store three pieces of data: a server name, a timestamp, and the minutes since an event occurred on the server.

我在学习 Powershell 的时候,把所有这些都放到了一个二维数组中:

When I was learning Powershell, I put all this into a two-dimensional array:

$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 不能很好地处理数组,所以我开始使用自定义对象:

export-csv doesn't play well with arrays, so I started using a custom object:

$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

那是正确的导出,并且处理对象属性比处理二维数组中的列更容易.

That's exports correctly, and dealing with object properties is easier than dealing with columns in a two-dimensional array.

但是如果我想创建多个不在数组中的自定义对象,我必须一遍又一遍地编写自定义对象代码.

But if I want to create several custom objects that aren't in an array, I have to write the custom-object code over and over again.

$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编程语言吗?类似的东西:


What if Powershell could design custom classes in addition to custom objects? Like OO programming languages do? Something like:

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 中可行吗?

Is that possible in Powershell?

推荐答案

您可以在 PowerShell 中定义类.

You can define classes in PowerShell.

Add-Type -Language CSharp @"
public class Record{
    public System.DateTime TimeStamp;
    public string Server;
    public int Minutes;
}
"@;
$MyRecord = new-object Record;
$MyRecord.Server = "myserver";
$MyRecord.Timestamp = Get-Date;
$MyRecord.Minutes = 15;

这篇关于电源外壳.创建一个类文件来保存自定义对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆