[英]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.