2012-05-23 41 views
2

大部分開箱即用的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. 我應該把我的類放在一個powershell字符串中,然後動態編譯它嗎?

回答

7

你可以使用這個語法:

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

有幾個選項可以用自定義屬性創建自己的對象。還可以使用附加屬性擴展現有對象。最明顯的方法是使用Add-會員的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}} 

個人而言,我更喜歡第一種方法,因爲它是更加明確,少揮手魔術,但在一天結束的時候它是一種腳本語言,所以無論怎樣的工作原理是這樣做的正確方法。