¿Cómo fuerzo la salida a "Format-Table" para un PSObject personalizado SIN usar un archivo .format.ps1xml?

¿Cómo fuerzo la salida a "Format-Table" para un PSObject personalizado SIN usar un archivo .format.ps1xml?

Sé que puedo definir el formato MyCustomPSObjectgenerando y cargando un MyCustomPSObject.format.ps1xmlarchivo.

y he vistola gente hace esta generación de archivos de formato sobre la marcha desde dentro del archivo de script .ps1.(También aquí empezandolistado debajo de la oración"Así que escribí una función avanzada de PowerShell llamada Get-ProcessTotal"comenzando en la línea 145.)

Y, por lo que tengo entendido,la primera entrada en ese archivo de formato se utiliza como predeterminada.

Generar ese archivo externo me parece engorroso.

Pregunta:

  • ¿Hay alguna manera de hacer esto SIN generar ni cargar ese archivo externo?

Todo lo que quiero es"Grábalo como una tabla". (Básicamente, ejecutarlo Format-Tablepero sin perder la objetividad en el proceso).

Pregunta relacionada

Script Get-VSSWriters.Current-Version.ps1

Este es el guión en cuestión:

# This script lists VSS writers.
# The original, uncustomized, version was taken from here:
# https://gallery.technet.microsoft.com/scriptcenter/Powershell-ScriptFunction-415e9e70

$RawWriters = Invoke-Command -ErrorAction Stop -ScriptBlock {
    #Requires -RunAsAdministrator 
    return (VssAdmin List Writers)
} 


# We don't really care about "WriterID" and "WriterInstanceID", so we leave them out of the default 
# display set. (Approach copied from here:
# https://learn-powershell.net/2013/08/03/quick-hits-set-the-default-property-display-in-powershell-on-custom-objects/ )
$defaultDisplaySet = 'WriterEnum', 'WriterName', 'StateID', 'StateDesc', 'LastError'
$defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet', [string[]]$defaultDisplaySet)
$PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet)


$Writers = @()
for ($i=0; $i -lt (($RawWriters.Count)-3)/6; $i++) {
    $Writer = New-Object -TypeName psobject
    $Writer.PSObject.TypeNames.Insert(0, 'MyVSSWriter')
    $Writer | Add-Member MemberSet PSStandardMembers $PSStandardMembers

    $Writer| Add-Member "WriterEnum" ($i + 1)

    # Note: We split on both single quotes and double quotes.
    # That way this script will work for both:
    # * the English language version of Windows (>>Writer name: 'WMI Writer'<<) 
    # * the German version of Windows (>>Verfassername: "WMI Writer"<<)
    $Writer| Add-Member "WriterName" $RawWriters[($i*6)+3].Split("`"'")[1]

    $Writer| Add-Member "WriterID" $RawWriters[($i*6)+4].Split('{}')[1]
    $Writer| Add-Member "WriterInstanceID" $RawWriters[($i*6)+5].Split('{}')[1]

    $Writer| Add-Member "StateID"   $RawWriters[($i*6)+6].Split('[]')[1]
    $Writer| Add-Member "StateDesc" $RawWriters[($i*6)+6].Split('[]')[2].SubString(1)
    $Writer| Add-Member "LastError" $RawWriters[($i*6)+7].Split(':')[1].Substring(1)

    $Writers += $Writer 
}

$Writers

Producción real

PS C:\> .\Get-VSSWriters.Current-Version.ps1 | select -first 1
WriterEnum : 1
WriterName : Task Scheduler Writer
StateID    : 1
StateDesc  : Stable
LastError  : No error

Salida deseada

PS C:\> .\Get-VSSWriters.Updated-Version.ps1 | select -first 1
WriterEnum WriterName            StateID StateDesc LastError
---------- ----------            ------- --------- ---------
         1 Task Scheduler Writer 1       Stable    No error

(Que debería ser lo mismo que .\Get-VSSWriters.Current-Version.ps1 | select -first 1 | Format-Table).

información relacionada