在Powershell中打印对象属性

在交互式控制台中工作时,如果我定义一个新的对象,并像这样分配一些属性值:

$obj = New-Object System.String $obj | Add-Member NoteProperty SomeProperty "Test" 

然后,当我将我的variables名称input到交互式窗口中时,Powershell会给出对象属性和值的摘要:

 PS C:\demo> $obj SomeProperty ------------ Test 

我基本上只想做这个,但是从一个脚本中的函数。 该函数创build一个对象并设置一些属性值,我希望它在返回之前将对象值的摘要打印到Powershell窗口。 我尝试使用函数内的写主机:

 Write-Host $obj 

但是这只是输出对象的types而不是总结:

 System.Object 

我怎样才能让我的函数输出对象的属性值的摘要到Powershell窗口?

尝试这个:

 Write-Host ($obj | Format-Table | Out-String) 

要么

 Write-Host ($obj | Format-List | Out-String) 

我对这个问题的解决scheme是使用$()子expression式块 。

 Add-Type -Language CSharp @" public class Thing{ public string Name; } "@; $x = New-Object Thing $x.Name = "Bill" Write-Output "My name is $($x.Name)" Write-Output "This won't work right: $x.Name" 

得到:

 My name is Bill This won't work right: Thing.Name 

在Powershell中打印出对象的属性和值。 下面的例子适合我。

$ pool = Get-Item“IIS:\ AppPools.NET v4.5”

$ pool | 获得会员

  TypeName: Microsoft.IIs.PowerShell.Framework.ConfigurationElement#system.applicationHost/applicationPools#add Name MemberType Definition ---- ---------- ---------- Recycle CodeMethod void Recycle() Start CodeMethod void Start() Stop CodeMethod void Stop() applicationPoolSid CodeProperty Microsoft.IIs.PowerShell.Framework.CodeProperty state CodeProperty Microsoft.IIs.PowerShell.Framework.CodeProperty ClearLocalData Method void ClearLocalData() Copy Method void Copy(Microsoft.IIs.PowerShell.Framework.ConfigurationElement ... Delete Method void Delete() ... 

$ pool | Select-Object -Property *#你可以省略-Property

 name : .NET v4.5 queueLength : 1000 autoStart : True enable32BitAppOnWin64 : False managedRuntimeVersion : v4.0 managedRuntimeLoader : webengine4.dll enableConfigurationOverride : True managedPipelineMode : Integrated CLRConfigFile : passAnonymousToken : True startMode : OnDemand state : Started applicationPoolSid : S-1-5-82-271721585-897601226-2024613209-625570482-296978595 processModel : Microsoft.IIs.PowerShell.Framework.ConfigurationElement ... 

提示#1和#12

理想情况下,你的脚本会创build你的对象( $obj = New-Object -TypeName psobject -Property @{'SomeProperty'='Test'} ),然后做一个Write-Output $objects 。 您将输出到pipe道Format-Table

 PS C:\> Run-MyScript.ps1 | Format-Table 

他们应该真的调用PowerShell PowerObjectandPipingShell。