使用PowerShell函数返回复杂对象?

时间:2012-05-23 15:04:48

标签: powershell

大多数开箱即用的PowerShell命令都返回“复杂”对象。

例如,Get-Process会返回System.Diagnostics.Process的数组。

我写过的所有函数都返回一个简单类型或现有类型的对象。

如果我想归还自制物品,那么准则是什么?

例如,假设我有一个包含这些属性的对象:NameAge。在C#中我会写

public class Person {
    public string Name { get; set; }
    public uint Age { get; set; }
}

从PowerShell函数返回此类对象有哪些选择?

  1. 我的目标是创建PowerShell模块,我应该转移到c#模块而不是ps1文件吗?
  2. 我应该在自定义DLL中编译这些对象,并使用LoadWithPartialName
  3. 在我的模块中引用它
  4. 我应该将我的类放在powershell字符串中,然后动态编译吗?

2 个答案:

答案 0 :(得分:8)

您可以使用以下语法:

New-Object PSObject -Property @{
   Name = 'Bob'
   Age = 32
}

答案 1 :(得分:3)

使用自定义属性创建自己的对象有几个选项。还可以使用其他属性扩展现有对象。最明确的方法是使用Add-Member cmdlet:

$test = New-Object PSCustomObject
Add-Member -InputObject $test -Name Name -Value 'Bob' -MemberType NoteProperty
Add-Member -InputObject $test -Name Age -Value 32 -MemberType NoteProperty

您还可以使用以下事实:对象可以扩展,并且Select-Object可以隐式地向管道中的对象添加属性:

$test = '' | Select @{n='Name'; e={'Bob'}}, @{n='Age'; e={32}}

就我个人而言,我更喜欢第一种方法,因为它更明确,更少挥手魔术,但最终它是一种脚本语言,所以无论做什么都是正确的方法。