Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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_Powershell Module - Fatal编程技术网

C# PowerShell自定义对象,忽略标准输出的属性

C# PowerShell自定义对象,忽略标准输出的属性,c#,powershell,powershell-module,C#,Powershell,Powershell Module,我编写了一个PowerShell模块,并返回了一些自定义对象。 现在我不想显示每个属性,比如getchilditem的行为 如果我显示成员,例如长度和存在之间没有区别。那么,如果我键入gci“C:\temp\u\u ex150113.log”,为什么不显示存在? 这是我的自定义对象 public class LogEntry { public DateTime Date { get; set; } public DateTime Time { get; set; }

我编写了一个PowerShell模块,并返回了一些自定义对象。 现在我不想显示每个属性,比如
getchilditem
的行为

如果我显示成员,例如
长度
存在
之间没有区别。那么,如果我键入
gci“C:\temp\u\u ex150113.log”
,为什么不显示
存在?

这是我的自定义对象

public class LogEntry
{
    public DateTime Date { get; set; }
    public DateTime Time { get; set; }
    public DateTime DateTime => new DateTime(this.Date.Year, this.Date.Month, this.Date.Day, this.Time.Hour, this.Time.Minute, this.Time.Second);
    public DateTime DateTimeLocalTime => DateTime.SpecifyKind(this.DateTime, DateTimeKind.Utc);
    public IPAddress SourceIpAddress { get; set; }
    public string Method { get; set; }
    public string UriStem { get; set; }
    public string UriQuery { get; set; }
    public int Port { get; set; }
    public string Username { get; set; }
    public IPAddress ClientIpAddress { get; set; }
    public string UserAgent { get; set; }
    public string Referrer { get; set; }
    public string HttpStatus { get; set; }
    public string ProtocolSubstatus { get; set; }
    public string SystemErrorCodes { get; set; }
    public int ServerSentBytes { get; set; }
    public int ServerReceivedBytes { get; set; }
    public int TimeTaken { get; set; }
}

编辑: 多亏了这个答案,我现在有了一个更干净的标准

为此,我向项目中添加了三个文件:

  • ConvertFromIISLogFile.format.ps1xml
  • ConvertFromIISLogFile.ps1xml
  • ConvertFromIISLogFile.psd1
ConvertFromIISLogFile.format.ps1xml

<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
    <ViewDefinitions>
        <View>
            <Name>ConvertFromIISLogFile.LogEntry</Name>
            <ViewSelectedBy>
                <TypeName>ConvertFromIISLogFile.LogEntry</TypeName>
            </ViewSelectedBy>
            <TableControl>
                <TableHeaders>
                    <!-- Timestamp -->
                    <TableColumnHeader>
                        <Width>19</Width>
                    </TableColumnHeader>
                    <!-- IP -->
                    <TableColumnHeader>
                        <Width>15</Width>
                    </TableColumnHeader>
                    <!-- Port -->
                    <TableColumnHeader>
                        <Width>4</Width>
                    </TableColumnHeader>
                    <!-- Status -->
                    <TableColumnHeader>
                        <Width>6</Width>
                    </TableColumnHeader>
                    <!-- Method -->
                    <TableColumnHeader>
                        <Width>6</Width>
                    </TableColumnHeader>
                    <!-- Target -->
                    <TableColumnHeader/>
                    <!-- Query -->
                    <TableColumnHeader/>
                    <!-- UserAgent -->
                    <TableColumnHeader/>
                    <!-- Sent -->
                    <TableColumnHeader>
                        <Width>7</Width>
                    </TableColumnHeader>
                    <!-- Receive -->
                    <TableColumnHeader>
                        <Width>7</Width>
                    </TableColumnHeader>
                    <!-- TimeTaken -->
                    <TableColumnHeader>
                        <Width>9</Width>
                    </TableColumnHeader>
                </TableHeaders>
                <TableRowEntries>
                    <TableRowEntry>
                        <TableColumnItems>
                            <TableColumnItem>
                                <PropertyName>Timestamp</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>IP</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>Port</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>Status</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>Method</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>Target</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>Query</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>UserAgent</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>Sent</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>Receive</PropertyName>
                            </TableColumnItem>
                            <TableColumnItem>
                                <PropertyName>TimeTaken</PropertyName>
                            </TableColumnItem>
                        </TableColumnItems>
                    </TableRowEntry>
                </TableRowEntries>
            </TableControl>
        </View>

    </ViewDefinitions>
</Configuration>

Get ChildItem的输出由PS1XML文件控制

见:

对于您的应用程序,我认为将PSStandardMemebers属性添加到您的对象中可能会达到您想要的效果:

<?xml version="1.0" encoding="utf-8"?>
<Types>
  <Type>
    <Name>ConvertFromIISLogFile.LogEntry</Name>
    <Members>
      <MemberSet>
        <Name>PSStandardMembers</Name>
        <Members>
          <PropertySet>
            <Name>DefaultDisplayPropertySet</Name>
            <ReferencedProperties>
              <Name>Timestamp</Name>
              <Name>IP</Name>
              <Name>Port</Name>
              <Name>Status</Name>
              <Name>Method</Name>
              <Name>Target</Name>
              <Name>Query</Name>
              <Name>UserAgent</Name>
              <Name>Sent</Name>
              <Name>Receive</Name>
              <Name>TimeTaken</Name>
            </ReferencedProperties>
          </PropertySet>
        </Members>
      </MemberSet>

      <AliasProperty>
        <Name>Timestamp</Name>
        <ReferencedMemberName>DateTimeLocalTime</ReferencedMemberName>
      </AliasProperty>
      <AliasProperty>
        <Name>IP</Name>
        <ReferencedMemberName>ClientIpAddress</ReferencedMemberName>
      </AliasProperty>
      <AliasProperty>
        <Name>Status</Name>
        <ReferencedMemberName>HttpStatus</ReferencedMemberName>
      </AliasProperty>
      <AliasProperty>
        <Name>Sent</Name>
        <ReferencedMemberName>ServerSentBytes</ReferencedMemberName>
      </AliasProperty>
      <AliasProperty>
        <Name>Receive</Name>
        <ReferencedMemberName>ServerReceivedBytes</ReferencedMemberName>
      </AliasProperty>
      <AliasProperty>
        <Name>Target</Name>
        <ReferencedMemberName>UriStem</ReferencedMemberName>
      </AliasProperty>
      <AliasProperty>
        <Name>Query</Name>
        <ReferencedMemberName>UriQuery</ReferencedMemberName>
      </AliasProperty>
    </Members>
  </Type>
</Types>
@{

# Script module or binary module file associated with this manifest.
RootModule = 'ConvertFromIISLogFile.dll'

# [...]

# Type files (.ps1xml) to be loaded when importing this module
TypesToProcess = @('ConvertFromIISLogFile.ps1xml')

# Format files (.ps1xml) to be loaded when importing this module
FormatsToProcess = @('ConvertFromIISLogFile.format.ps1xml')

# [...]

}
Get-Help PS1XML