【问题标题】:Returning complex object with PowerShell functions?使用 PowerShell 函数返回复杂对象?
【发布时间】:2012-05-24 00:41:37
【问题描述】:

大多数开箱即用的 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. 我应该把我的类放在一个 powershell 字符串中,然后动态编译它吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您可以使用以下语法:

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

    【讨论】:

      【解决方案2】:

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

      就我个人而言,我更喜欢第一种方法,因为它更明确,也更少挥舞魔法,但归根结底,它是一种脚本语言,所以任何可行的方法都是正确的方法。

      【讨论】:

        猜你喜欢
        • 2020-11-01
        • 2011-02-27
        • 2020-11-17
        • 1970-01-01
        • 1970-01-01
        • 2021-10-02
        • 2013-01-21
        • 2023-03-22
        • 1970-01-01
        相关资源
        最近更新 更多