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

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

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

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

Вопрос:

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

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

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

Скрипт Get-VSSWriters.Ток-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 .)

1 ответ1

0

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>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .