2016-12-07 1 views
0

私は時々、オブジェクトのデフォルト出力に便利な追加プロパティを組み込むことを望んでいました。例えばPowershellに追加のプロパティを表示するにはどうしたらいいですか?

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

私はすべてのこれらのプロパティ+ MachineNameプロパティを表示したい場合は?

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

これは機能しますが、明示的にすべてのデフォルトプロパティを指定する必要はありません。

私はPSStandardMembers.DefaultDisplayPropertySet.ReferencedPropertyNamesで試してみましたが、動作させることができませんでした。

これは簡単に行うことができますか?

答えて

0

私は私が望んでいた正確に何をするには、次の関数を作成することになった:

<# 
.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

これは、あなたが「簡単に」定義した内容によります。 PowerShellでは、XMLを使用してコマンドレットの出力を構成します(C:¥windows¥systems32¥windowspowershell¥v1.0¥DotNetTypes.format.ps1xml)。 C:\ windows \ systems32 \ windowspowershell \ v1.0 \ Types.ps1xmlという別のxmlファイルを作成します(デフォルトのファイルは変更できません)。

about_Types.ps1XMLはこれを参照してください:http://codingbee.net/tutorials/powershell/powershell-changing-a-command-outputs-default-formatting/

編集:あなたは、そのタスクのための新しいプロパティセットを作成する必要があります。これらのリンクを参照してください:
https://github.com/DBremen/PowerShellScripts/blob/master/functions/Add-PropertySet.ps1
https://powershellone.wordpress.com/2015/03/06/powershell-propertysets-and-format-views/

あなたはそれを作成した後、あなたがそのようにそれを呼び出します。

gps | select mypropertyset 
+0

興味深いですが、特定のコマンドレットの出力を恒久的に変更したくありません。私は、ケースバイケースで出力を(できればSelect-Objectで)変更できるようにしたいと考えています... – geoced

+0

問題は何ですか、選択オブジェクトで何ができるのですか? – 4c74356b41

+0

私はこのようなデフォルトの変数のリストをタイプしたくありません: '$ x | Id、Handles、CPU、Name、MachineName'を選択します。私は '$ x | DefaultProperties、MachineName' – geoced

関連する問題