2

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

例如,Get-Process返回一个数组System.Diagnostics.Process

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

如果我想退回自制物品,指南是什么?

例如,假设我有一个具有以下属性的对象:Name, Age. 在 C# 中我会写

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

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

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

2 回答 2

9

您可以使用以下语法:

New-Object PSObject -Property @{
   Name = 'Bob'
   Age = 32
}
于 2012-05-23T16:41:37.557 回答
4

有几个选项可以使用自定义属性创建您自己的对象。还可以使用其他属性扩展现有对象。最明确的方法是使用 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}}

就我个人而言,我更喜欢第一种方法,因为它更明确且更少挥手魔法,但归根结底,它是一种脚本语言,所以无论什么工作都是正确的方法。

于 2012-05-23T15:35:18.450 回答