【问题标题】:Create Custom PSObject PowerShell 2.0创建自定义 PSObject PowerShell 2.0
【发布时间】:2015-06-28 04:40:20
【问题描述】:

是否可以预先创建自定义对象 (PSObject) 并定义其属性,在程序执行的后期,我们不断向对象添加值数组。

例如;

$c = @()

$c = New-Object PSObject
$c | Add-Member -type NoteProperty -name Name 
$c | Add-Member -type NoteProperty -name Gender
$c | Add-Member -type NoteProperty -name Age


$c | Add-Member -type NoteProperty -name Name -value "John"
$c | Add-Member -type NoteProperty -name Gender -value "Male"
$c | Add-Member -type NoteProperty -name Age -value "30"

提前感谢任何线索或建议。

【问题讨论】:

  • 我不确定为什么在将 $c 设置为新的 PSObject 之前将其设置为空数组。数组因第二次分配而丢失。
  • 我有一个脚本,它对一组计算机进行检查列表。因此,我想通过创建一个对象并将每台计算机的状态放在一个数组中来记录每台计算机的每次检查的状态。第一项检查是测试计算机的连接。我想完成对计算机的所有检查,然后记录状态。
  • 有趣的事实:允许将答案标记为正确,以便关闭问题。 :-)

标签: powershell


【解决方案1】:

我不确定我是否跟随。您想要具有指定属性的对象数组吗?因为您的示例首先创建了一个数组,然后您将其覆盖为单个对象。所以你丢失了你的数组。

您可以使用new-object 创建对象,并在-Property 参数中将属性值指定为哈希表。像这样:

$c = New-Object psobject -Property @{
    Name = "John"
    Gender = "Male"
    Age = 30
}

要制作它们的数组,您可以使用:

$myarray = @()

$myarray += New-Object psobject -Property @{
    Name = "John"
    Gender = "Male"
    Age = 30
}

如果您有多个测试一个一个地运行,您可以在一个测试并创建“结果对象”的函数中运行测试,然后收集它:

$myresults = @()

function mytests($computer) {
    #Test connection
    $online = Test-Connection $computer

    #Get buildnumber
    $build = (Get-WmiObject win32_operatingsystem -ComputerName $computer).buildnumber

    #other tests

    #output results
    New-Object psobject -Property @{
        Online = $online
        WinBuild = $build
    }
}

$myresults += mytests -computer "mycomputername"

【讨论】:

  • 是为第一个数组元素指定属性值的约定吗?我的意思是,我们可以不声明数组结构(带有列名)然后在适当的时候添加数组元素。数组元素是否必须与 PSObject 初始化一起设置?
  • 你的意思是在创建的时候一定要添加到数组中吗?因为你没有。您可以使用 $myobjname = new-object ..... 然后稍后添加它 $myarray += $obj 。在大多数情况下,当您需要创建对象时,您会知道对象的值,因此一起做会更容易
  • @Rajiv:数组不是电子表格。数组包含对象;对象具有名称和值的属性。
【解决方案2】:

是的,所以我知道这是一篇旧帖子,但 Don Jones 做了这样的事情:

$props = @{
    Name = "John"
    Gender = "Male"
    Age = 30
}

$c = New-Object PSObject -Property $props

您可以运行以下命令来查看新对象的属性和值:

c$ | Get-Member

我认为这就是您正在寻找的。

【讨论】:

  • 这与旧答案完全相同。
猜你喜欢
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多