簡體   English   中英

自定義PowerShell對象輸出

[英]Customize PowerShell object output

我有一個C#類:

class SomeObject
{
    int id;
    string displayName;
    // And so on..

   public override string ToString()
   {
       return "Hello";
   }
}

我有一個命令, Get-SomeObject返回的實例SomeObject 但是,如果我這樣做:

$o = Get-SomeObject
$o

PowerShell提示SomeObject屬性的值,這意味着:

id = 5
displayName = Pikachu

無論如何,有沒有使PowerShell調用該對象的ToString()方法的方法,所以將“ Hello”打印到了控制台?

默認情況下,PowerShell將顯示不帶格式信息的對象的屬性值。 對於四個或更少的屬性,使用表格式。 對於五個或更多屬性,使用列表格式。 如果要控制對象的顯示方式,則應通過Update-FormatData添加格式數據。 請參見有關Update-FormatData和about_Format.ps1xml的手冊頁。

另外,您不應在ToString()中寫入控制台。 您的ToString()方法應該只返回一個字符串。 順便說一句,您還可以通過將對象強制轉換為[string]來使PowerShell調用ToString(),例如:

PS C:\> Add-Type -TypeDefinition @'
>>> public class SomeObject
>>> {
>>>     public int Id {get; set;}
>>>     public string DisplayName {get; set;}
>>>     // And so on..
>>>
>>>    public override string ToString()
>>>    {
>>>        return "Hello";
>>>    }
>>> }
>>> '@

PS C:\> $o = New-Object SomeObject
PS C:\> [string]$o
Hello

如果您想遵循格式數據路線,請參見以下示例:

PS C:\> @'
>>> <Configuration>
>>>   <ViewDefinitions>
>>>     <View>
>>>       <Name>SomeObject</Name>
>>>       <ViewSelectedBy>
>>>          <TypeName>SomeObject</TypeName>
>>>       </ViewSelectedBy>
>>>       <TableControl>
>>>         <TableHeaders>
>>>           <TableColumnHeader>
>>>             <Label>SomeObject</Label>
>>>           </TableColumnHeader>
>>>         </TableHeaders>
>>>         <TableRowEntries>
>>>           <TableRowEntry>
>>>             <TableColumnItems>
>>>               <TableColumnItem>
>>>                 <ScriptBlock>$_.ToString()</ScriptBlock>
>>>               </TableColumnItem>
>>>             </TableColumnItems>
>>>           </TableRowEntry>
>>>          </TableRowEntries>
>>>       </TableControl>
>>>     </View>
>>>   </ViewDefinitions>
>>> </Configuration>
>>> '@ > SomeObject.format.ps1xml

PS C:\> Update-FormatData .\SomeObject.format.ps1xml
PS C:\> $o

SomeObject
----------
Hello

如果您的SomeObject類型在名稱空間中,請確保更新上述格式數據中的<TypeName>元素以反映名稱空間限定的類型名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM