2010-03-17 29 views
6

我正在做一些Powershell腳本(第一次)查看SharePoint站點中的一些內容,我希望能夠做的是通過對象的屬性列表並僅輸出它們的值以「property-name = value」格式。現在Powershell有一個「eval」等價物嗎?有沒有更好的方法來查看屬性和值的列表?

我能找到使用這個元素的列表:

$myObject | get-member -membertype property 

將在一個非常清晰易讀的方式返回所有屬性的列表。但我需要的是爲這些屬性找到價值。

在某些腳本語言中,我可能會有一種eval(「$ myObject。$ propertyName」)調用 - 我已經從get-member輸出中提取了$ propertyName - 並將其評估爲代碼,我需要的那種快速和骯髒的解決方案將會很好。

這是否存在於Powershell中,還是存在更方便的方法?我應該使用反射嗎?

回答

8

要獲取對象屬性的值,可以使用多種方法。

首先,您可以使用Select-Object並使用-Property參數指定您想返回的屬性值。顯示方式將取決於您指定的屬性數量和它所在的對象類型。如果你想要所有的屬性,你可以使用通配符(*)來獲取全部屬性。

實施例 -

$myobject | Select-Object -Property name, length 
$myobject | Select-Object -Property * 

也可以控制輸出的格式以類似的方式,使用格式-List或Format-表。

示例 -

$myobject | Format-List -Property * 
$myobject | Format-Table -Property name, length 

最後,做一個 「EVAL」 式輸出,你可以簡單地輸入

$myobject."$propertyname" 

和財產的價值將被退回。

+3

我想你甚至可以失去這最後的代碼片斷引號: $ myObject的$ PROPERTYNAME 它看起來奇怪,但工程。 –

+0

這完美的技巧,謝謝! – glenatron

1

爲您的目的最好的選擇是Format-Custom

get-date | Format-Custom -Depth 1 -Property * 
get-childitem . | select-object -first 1 | Format-Custom -Depth 1 -Property * 

這也許是太冗長,但有用的;)


或者你真的可以用Get-Member

$obj = get-date 
$obj | 
    gm -MemberType *property | 
    % { write-host ('{0,-12} = {1}' -f $_.Name, $obj.($_.Name)) } 
1

爲此,我會建議使用格式列表-force例如:

Get-Process | Format-List * -Force 

-Force是可選的,但有時PowerShell會隱藏我真正想看到的屬性。

相關問題