簡體   English   中英

PowerShell自定義對象,在標准輸出時忽略屬性

[英]PowerShell Custom Object, ignore Properties at standard output

我編寫了一個PowerShell模塊,並返回了一些自定義對象。 現在,我不想顯示每個屬性,例如Get-ChildItem的行為。

在此處輸入圖片說明

如果我顯示成員,則例如LengthExists之間沒有區別。 那么,如果我輸入gci "C:\\temp\\u_ex150113.log"為什么不顯示Exists 在此處輸入圖片說明

這是我的自定義對象

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>

ConvertFromIISLogFile.ps1xml

<?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>

ConvertFromIISLogFile.psd1

@{

# 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-ChildItem的輸出由PS1XML文件控制。

看到:

Get-Help PS1XML

對於您的應用程序,我認為向您的對象添加PSStandardMemebers屬性可能會滿足您的要求:

http://blogs.msdn.com/b/powershell/archive/2010/02/18/psstandardmembers-the-stealth-property.aspx

暫無
暫無

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

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