C# 自定义PowerShell对象输出
我有一个C级: 我有一个命令,C# 自定义PowerShell对象输出,c#,powershell,C#,Powershell,我有一个C级: 我有一个命令,getsomeobject,它返回SomeObject的一个实例。 但是,如果我这样做: $o = Get-SomeObject $o PowerShell会提示SomeObject属性的值,这意味着: id = 5 displayName = Pikachu 是否仍然需要让PowerShell调用该对象的ToString()方法,以便将“Hello”打印到控制台?默认情况下,PowerShell将显示没有格式信息的对象的属性值。对于四个或更少的特性,使用表格格
getsomeobject
,它返回SomeObject
的一个实例。
但是,如果我这样做:
$o = Get-SomeObject
$o
PowerShell会提示SomeObject属性的值,这意味着:
id = 5
displayName = Pikachu
是否仍然需要让PowerShell调用该对象的
ToString()
方法,以便将“Hello”打印到控制台?默认情况下,PowerShell将显示没有格式信息的对象的属性值。对于四个或更少的特性,使用表格格式。对于五个或更多属性,使用列表格式。如果要控制对象的显示方式,应通过更新FormatData
添加格式化数据。请参阅有关更新FormatData和关于_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
PS C:\>@
>>>
>>>
>>>
>>>某物
>>>
>>>某物
>>>
>>>
>>>
>>>
>>>某物
>>>
>>>
>>>
>>>
>>>
>>>
>>>$\u0.ToString()
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>'@>SomeObject.format.ps1xml
PS C:\>更新FormatData。\SomeObject.format.ps1xml
私人秘书长:\>$o
某物
----------
你好
如果您的
SomeObject
类型位于命名空间中,请确保更新上述格式数据中的
元素,以反映命名空间限定的类型名称。默认情况下,PowerShell将显示没有格式信息的对象的属性值。对于四个或更少的特性,使用表格格式。对于五个或更多属性,使用列表格式。如果要控制对象的显示方式,应通过更新FormatData
添加格式化数据。请参阅有关更新FormatData和关于_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
PS C:\>@
>>>
>>>
>>>
>>>某物
>>>
>>>某物
>>>
>>>
>>>
>>>
>>>某物
>>>
>>>
>>>
>>>
>>>
>>>
>>>$\u0.ToString()
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>'@>SomeObject.format.ps1xml
PS C:\>更新FormatData。\SomeObject.format.ps1xml
私人秘书长:\>$o
某物
----------
你好
如果您的
SomeObject
类型位于命名空间中,请确保更新上述格式数据中的
元素,以反映命名空间限定的类型名称。默认情况下,PowerShell将显示没有格式信息的对象的属性值。对于四个或更少的特性,使用表格格式。对于五个或更多属性,使用列表格式。如果要控制对象的显示方式,应通过更新FormatData
添加格式化数据。请参阅有关更新FormatData和关于_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
PS C:\>@
>>>
>>>
>>>
>>>某物
>>>
>>>某物
>>>
>>>
>>>
>>>
>>>某物
>>>
>>>
>>>
>>>
>>>
>>>
>>>$\u0.ToString()
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>'@>SomeObject.format.ps1xml
PS C:\>更新FormatData。\SomeObject.format.ps1xml
私人秘书长:\>$o
某物
----------
你好
如果您的
SomeObject
类型位于命名空间中,请确保更新上述格式数据中的
元素,以反映命名空间限定的类型名称。默认情况下,PowerShell将显示没有格式信息的对象的属性值。对于四个或更少的特性,使用表格格式。对于五个或更多属性,使用列表格式。如果要控制对象的显示方式,应通过更新FormatData
添加格式化数据。请参阅有关更新FormatData和关于_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
PS C:\>@
>>>
>>>
>>>
>>>某物
>>>
>>>某物
>>>
>>>
>>>
>>>
>>>某物
>>>
>>>
>>>
>>>
>>>
>>>
>>>$\u0.ToString()
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>'@>SomeObject.format.ps1xml
PS C:\>更新FormatData。\SomeObject.format.ps1xml
私人秘书长:\>$o
某物
----------
你好
如果SomeObject
类型位于命名空间中,请确保更新
元素