2

既定の PowerShell コマンドのほとんどは、"複雑な" オブジェクトを返します。

たとえば、Get-Processの配列を返しますSystem.Diagnostics.Process

私がこれまでに書いたすべての関数は、単純な型または既存の種類のオブジェクトを返すものでした。

手作り品を返品したい場合のガイドラインは?

たとえば、次の属性を持つオブジェクトがあるとします: NameAge。C#では、私は書いたでしょう

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

PowerShell 関数からそのようなオブジェクトを返すためのオプションは何ですか?

  1. 私の目標は PowerShell モジュールを作成することなので、ps1 ファイルではなく ac# モジュールに移行する必要がありますか?
  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 コマンドレットを使用することです。

$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 に答える