Ich weiß, dass ich die Formatierung für mich definieren kann, indem ich eine Datei MyCustomPSObject
erstelle und lade .MyCustomPSObject.format.ps1xml
Und ich habe gesehenDie Benutzer führen diese Formatdateigenerierung spontan innerhalb der PS1-Skriptdatei durch.(Auch hier beginnendAuflistung unter dem Satz„Also habe ich eine erweiterte PowerShell-Funktion namens Get-ProcessTotal geschrieben“ab Zeile 145.)
Und soweit ich weiß,Der erste Eintrag in dieser Formatierungsdatei wird als Standard verwendet.
Das Generieren dieser externen Datei erscheint mir umständlich.
Frage:
- Gibt es eine Möglichkeit, dies zu tun, OHNE diese externe Datei zu generieren und zu laden?
Alles was ich will ist"Als Tabelle ausgeben". (Im Grunde wird es durchlaufen, Format-Table
ohne dass dabei die Objekthaftigkeit verloren geht.)
Verwandte Fragen
Skript „Get-VSSWriters.Current-Version.ps1“
Dies ist das fragliche Skript:
# 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
Tatsächliche Leistung
PS C:\> .\Get-VSSWriters.Current-Version.ps1 | select -first 1
WriterEnum : 1
WriterName : Task Scheduler Writer
StateID : 1
StateDesc : Stable
LastError : No error
Gewünschte Ausgabe
PS C:\> .\Get-VSSWriters.Updated-Version.ps1 | select -first 1
WriterEnum WriterName StateID StateDesc LastError
---------- ---------- ------- --------- ---------
1 Task Scheduler Writer 1 Stable No error
(Was dasselbe sein sollte wie .\Get-VSSWriters.Current-Version.ps1 | select -first 1 | Format-Table
.)