2009-09-02 98 views
7

這裏是柯克·蒙羅博客文章,解釋腳本如何設置DefaultDisplayPropertySet其輸出對象:您可以在PowerShell v2腳本中設置對象的DefaultDisplayPropertySet嗎?

Essential PowerShell: Define default properties for custom objects

他的技術和示例代碼沒有出現在PowerShell中V2工作。 (注意,我安裝了PowerTab和PSCX - 可能這些可能會造成干擾)。

任何人都知道如何讓它在PowerShell v2上運行?


UPDATE: 下面是從博客文章,這不是爲我工作(注意,我已經糾正了單引號字符)的例子:

$myObject = New-Object PSObject 
$myObject | Add-Member NoteProperty Name 'My Object' 
$myObject | Add-Member NoteProperty Property1 1 
$myObject | Add-Member NoteProperty Property2 2 
$myObject | Add-Member NoteProperty Property3 3 
$myObject | Add-Member NoteProperty Property4 4 
$myObject | Add-Member NoteProperty Property5 5 
$myObject 

    ## Output: 
    # Name  : My Object 
    # Property1 : 1 
    # Property2 : 2 
    # Property3 : 3 
    # Property4 : 4 
    # Property5 : 5 

$defaultProperties = @('Name','Property2','Property4') 
$defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet',[string[]]$defaultProperties) 
$PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet) 
$myObject | Add-Member MemberSet PSStandardMembers $PSStandardMembers 
$myObject 

    ## Output: 
    # Name  : My Object 
    # Property1 : 1 
    # Property2 : 2 
    # Property3 : 3 
    # Property4 : 4 
    # Property5 : 5 

輸出不應該是在添加DefaultDisplayPropertySet後(即,它應該只有Name,Property2和Property4)相同。

+0

I S還應該注意到,我正在Vista上運行PowerShell v2,通過Microsoft Windows Management Framework RC。 http://blogs.msdn.com/powershell/archive/2009/08/14/powershell-2-0-for-windows-vista-and-windows-server-2008-release-candidate.aspx – totorocat 2009-09-02 21:46:37

回答

6

你能舉一個你的非工作代碼的例子嗎?這應該在v2中完美工作,如果沒有,你發現了一個錯誤。

UPDATE:

(約引用刪除評論)

我已經證實了PowerShell的團隊,這的確是一個迴歸(錯誤)。

你可以在這個問題上的重要性在這裏投票給你:

https://connect.microsoft.com/PowerShell/feedback/ViewFeedback.aspx?FeedbackID=487938

感謝,

-Oisin (PowerShell的MVP)

+0

我有已經注意到無效的單引號和雙引號字符,並對其進行了修正我已將實際示例代碼添加到原始問題中。對你起作用嗎? – totorocat 2009-09-02 21:40:48

+0

更正:它只是單引號字符。 – totorocat 2009-09-02 21:48:09

+0

更新回答:這是一個在2.0版中的錯誤 – x0n 2009-09-03 17:50:31

0

我得到相同的結果,你做 - 它顯示全部5個屬性。我在Vista上運行Powershell 2.0 RC。我沒有安裝PowerTab或PSCX。

+0

感謝您花時間確認問題... – totorocat 2009-09-04 02:25:16

2

這裏是我創造瞭解決此問題的解決方案:

function Set-PSObjectDefaultProperties { 
param(
     [PSObject]$Object, 
     [string[]]$DefaultProperties 
    ) 

$name = $Object.PSObject.TypeNames[0]  

$xml = "<?xml version='1.0' encoding='utf-8' ?><Types><Type>" 

$xml += "<Name>$($name)</Name>" 

$xml += "<Members><MemberSet><Name>PSStandardMembers</Name><Members>" 

$xml += "<PropertySet><Name>DefaultDisplayPropertySet</Name><ReferencedProperties>" 

foreach($default in $DefaultProperties) { 
    $xml += "<Name>$($default)</Name>" 
} 

$xml += "</ReferencedProperties></PropertySet></Members></MemberSet></Members>" 

$xml += "</Type></Types>" 

$file = "$($env:Temp)\$name.ps1xml" 

Out-File -FilePath $file -Encoding "UTF8" -InputObject $xml -Force 

$typeLoaded = $host.Runspace.RunspaceConfiguration.Types | where { $_.FileName -eq $file } 

if($typeLoaded -ne $null) { 
    Write-Verbose "Type Loaded" 
    Update-TypeData 
} 
else { 
    Update-TypeData $file 
} 

}

現在你可以使用以下方法來創建自定義對象,並在PowerShell中V2設置默認屬性:

$myObject = New-Object PSObject 
$myObject | Add-Member NoteProperty Name 'My Object' 
$myObject | Add-Member NoteProperty Property1 1 
$myObject | Add-Member NoteProperty Property2 2 
$myObject | Add-Member NoteProperty Property3 3 
$myObject | Add-Member NoteProperty Property4 4 
$myObject | Add-Member NoteProperty Property5 5 
$myObject 

    ## Output: 
    # Name  : My Object 
    # Property1 : 1 
    # Property2 : 2 
    # Property3 : 3 
    # Property4 : 4 
    # Property5 : 5 

$defaultProperties = @('Name','Property2','Property4') 

Set-PSObjectDefaultProperties $myObject $defaultProperties 

$myObject 

    ## Output: 
    #Name   Property2   Property4 
    #----   ---------   --------- 
    #My Object  2     4 

它也可通過PoshCode:Set-PSObjectDefaultProperties

+0

您的示例代碼適用於我,但唉,此方法在我的項目(即PowerShell v3.0)中無效。你所做的很聰明 - 該函數替換PSCustomObject的默認格式。但是我有一些由此衍生出來的物體。我可能會結束寫一些ps1xml文件。 +1讓我學到東西。 – JamesQMurphy 2015-01-24 19:03:29

+0

考慮一個here-string而不是像這樣連接。 – jpmc26 2016-06-15 23:41:41

相關問題