Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义PowerShell对象输出_C#_Powershell - Fatal编程技术网

C# 自定义PowerShell对象输出

C# 自定义PowerShell对象输出,c#,powershell,C#,Powershell,我有一个C级: 我有一个命令,getsomeobject,它返回SomeObject的一个实例。 但是,如果我这样做: $o = Get-SomeObject $o PowerShell会提示SomeObject属性的值,这意味着: id = 5 displayName = Pikachu 是否仍然需要让PowerShell调用该对象的ToString()方法,以便将“Hello”打印到控制台?默认情况下,PowerShell将显示没有格式信息的对象的属性值。对于四个或更少的特性,使用表格格

我有一个C级:

我有一个命令,
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
类型位于命名空间中,请确保更新
元素