Как заставить вывод в «Format-Table» для пользовательского PSObject БЕЗ использования файла .format.ps1xml?

Я знаю, что я могу определить форматирование для моего MyCustomPSObject , создав и MyCustomPSObject.format.ps1xml файл MyCustomPSObject.format.ps1xml .

И я видел, как люди делают это форматирование-генерации файлов «на лету» изнутри файла .ps1-script. (Также здесь, начиная список ниже предложения «Итак, я написал расширенную функцию PowerShell, называемую Get-ProcessTotal», начиная с строки 145 ).

И, насколько я понимаю, первая запись в этом файле форматирования используется по умолчанию.

Создание этого внешнего файла кажется мне громоздким.

Вопрос:

  • Есть ли способ сделать это БЕЗ создания и загрузки этого внешнего файла?

Все, что я хочу, это «Вывести его как таблицу» . (В основном он запускается через Format-Table но не теряет объектности в этом процессе.)

Связанный вопрос

  • Как работает форматирование с помощью функции PowerShell, которая возвращает набор элементов?

Скрипт Get-VSSWriters.Current-Version.ps1

Это сценарий, о котором идет речь:

 # 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 

Фактический выход

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

Желаемый выход

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

(Который должен быть таким же .\Get-VSSWriters.Current-Version.ps1 | select -first 1 | Format-Table .)

One Solution collect form web for “Как заставить вывод в «Format-Table» для пользовательского PSObject БЕЗ использования файла .format.ps1xml?”

Tee-Object сохраняет выходной файл в файле или переменной, а также отправляет его по конвейеру.

 PS D:\PShell> $x = .\SU\Get-VSSWriters.Current-Version_1173588.ps1 PS D:\PShell> $x | select -First 1 | Tee-Object -Variable y | Format-Table -AutoSize -Wrap WriterEnum WriterName StateID StateDesc LastError ---------- ---------- ------- --------- --------- 1 Task Scheduler Writer 1 Stable No error PS D:\PShell> $y.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True False PSCustomObject System.Object PS D:\PShell> $y WriterEnum : 1 WriterName : Task Scheduler Writer StateID : 1 StateDesc : Stable LastError : No error PS D:\PShell> 
  • Уникальный идентификатор для USB-накопителя в Powershell
  • Выполнить скрипт PowerShell из C # с аргументами командной строки
  • Как различия версий влияют на команды PowerShell на удаленных компьютерах?
  • Как я могу удалить более 2 000 000 файлов в одном каталоге?
  • Использование Invoke-Command -ScriptBlock для функции с аргументами
  • Неверный размер шрифта Powershell на Windows 8.1
  • Netstat с именем процесса?
  • Можно ли каким-либо образом удалить PowerShell из Vista?
  • Как написать сценарий PowerShell, который принимает ввод конвейера?
  • Как ускорить получение Powershell Get-Childitem над UNC
  • Как установить размер окна окна PowerShell по умолчанию в Windows 7?
  • Interesting Posts
    Давайте будем гением компьютера.