Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PowerShell函数返回复杂对象?_Powershell - Fatal编程技术网

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

使用PowerShell函数返回复杂对象?,powershell,Powershell,大多数现成的PowerShell命令都返回“复杂”对象 例如,Get Process返回System.Diagnostics.Process的数组 我写过的所有函数要么返回简单类型,要么返回现有类型的对象 如果我想退回自制物品,有什么指导原则 例如,假设我有一个具有以下属性的对象:Name,Age。用C#我会写的 public class Person { public string Name { get; set; } public uint Age { get; set; }

大多数现成的PowerShell命令都返回“复杂”对象

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

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

如果我想退回自制物品,有什么指导原则

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

public class Person {
    public string Name { get; set; }
    public uint Age { get; set; }
}
从PowerShell函数返回此类对象的选项有哪些

  • 由于我的目标是创建PowerShell模块,我是否应该移动到c#模块而不是ps1文件
  • 我是否应该在自定义DLL中编译此类对象,并在模块中使用
    LoadWithPartialName
    引用它
  • 我应该将类放入powershell字符串中,然后动态编译它吗

  • 有几个选项可用于创建具有自定义特性的自己的对象。还可以使用其他特性扩展现有对象。最显式的方法是使用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
    
    还可以将对象可以扩展这一事实与“选择对象”可以向管道中的对象隐式添加属性这一事实结合使用:

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

    就我个人而言,我更喜欢第一种方法,因为它更显式,不太像挥手的魔术,但归根结底,它是一种脚本语言,所以任何有效的方法都是正确的方法。

    您可以使用以下语法:

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