2010-03-17 49 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会隐藏我真正想看到的属性。

相关问题