2016-12-07 3 views
0

Ich wünschte manchmal, dass die Standardausgabe für ein Objekt eine zusätzliche Eigenschaft enthalten würde, die ich nützlich finde.Wie kann ich eine zusätzliche Eigenschaft in Powershell anzeigen?

Zum Beispiel:

$x = ps - ComputerName server1 | select -First 1 
$x | fl 
Id  : 880 
Handles : 397 
CPU  : 
Name : acnamagent 

Was passiert, wenn ich all diese Eigenschaften + die Machinename-Eigenschaft angezeigt werden soll?

$x | select Id,Handles,CPU,Name,MachineName 
Id   : 880 
Handles  : 397 
CPU   : 
Name  : acnamagent 
MachineName : server1 

Dies funktioniert, aber ich möchte nicht alle diese Standardeigenschaften explizit benennen.

Ich habe versucht, mit PSStandardMembers.DefaultDisplayPropertySet.ReferencedPropertyNames zu spielen, aber ich konnte es nicht zum Laufen bringen.

Kann dies leicht gemacht werden?

Antwort

0

ich am Ende die Schaffung der folgenden Funktion genau das zu tun, was ich wollte:

<# 
.Synopsis 
    Selects all default properties plus those specified. 
.DESCRIPTION 
    In case no default properties exist, all are selected 
#> 
function Select-DefaultPropsPlus { 
    [CmdletBinding()] 
    [OutputType([PSObject])] 

    Param (
     [Parameter(Mandatory = $true, ValueFromPipeline = $true)] 
     [PSObject] $InputObject, 

     [Parameter(Mandatory = $true, Position = 1)] 
     [ValidateNotNullOrEmpty()] 
     [string[]] $Property 
    ) 

    Process { 
     $selectedProperties = @() 

     if (($InputObject | Get-Member -Force).Name -contains "PSStandardMembers") { 
      $selectedProperties = $InputObject.PSStandardMembers.DefaultDisplayPropertySet.ReferencedPropertyNames + $Property 
     } else { 
      $selectedProperties = * 
     } 

     $InputObject | Select-Object -Property $selectedProperties 
    } 
} 
2

Nun, das hängt davon ab, was Sie als "leicht" definieren. PowerShell verwendet XML zum Konfigurieren der Ausgabe von Cmdlets (C: \ windows \ systems32 \ windowspowershell \ v1.0 \ DotNetTypes.format.ps1xml). Sie erstellen eine andere XML-Datei (Sie können die Standarddatei nicht ändern) C: \ windows \ systems32 \ windowspowershell \ v1.0 \ Types.ps1xml. about_Types.ps1XML

diese Consult: http://codingbee.net/tutorials/powershell/powershell-changing-a-command-outputs-default-formatting/

Edit: müssten Sie einen neuen PropertySet für diese Aufgabe erstellen. Wenden Sie diese Links:
https://github.com/DBremen/PowerShellScripts/blob/master/functions/Add-PropertySet.ps1
https://powershellone.wordpress.com/2015/03/06/powershell-propertysets-and-format-views/

Nachdem Sie es erstellt haben würden Sie es so nennen:

gps | select mypropertyset 
+0

Das ist interessant, aber ich möchte die Ausgabe eines bestimmten Cmdlets nicht dauerhaft ändern. Ich möchte in der Lage sein, die Ausgabe (vorzugsweise mit Select-Object) von Fall zu Fall zu ändern ... – geoced

+0

Also, was das Problem ist, können Sie das mit einem ausgewählten Objekt tun, was ist das? – 4c74356b41

+0

Ich möchte nicht die Liste der Standardvariablen wie folgt eingeben: '$ x | Wählen Sie Id, Handles, CPU, Name, Maschinenname. Ich möchte etwas wie '$ x | Wählen Sie DefaultProperties, MachineName' – geoced

Verwandte Themen