154

インタラクティブ コンソールで作業しているときに、新しいオブジェクトを定義し、いくつかのプロパティ値を次のように割り当てます。

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

次に、対話型ウィンドウに変数の名前を入力すると、Powershell によってオブジェクトのプロパティと値の概要が表示されます。

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

私は基本的にこれだけをやりたいのですが、スクリプトの関数内からです。関数はオブジェクトを作成し、いくつかのプロパティ値を設定します。戻る前に、オブジェクト値の概要を Powershell ウィンドウに出力したいと考えています。関数内で Write-Host を使用してみました:

Write-Host $obj

しかし、これは要約ではなくオブジェクトのタイプを出力するだけです:

System.Object

関数でオブジェクトのプロパティ値の概要を Powershell ウィンドウに出力するにはどうすればよいですか?

4

7 に答える 7

56

この問題に対する私の解決策は、$() サブ式ブロックを使用することでした。

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
于 2015-06-18T19:51:17.487 に答える
19

Powershell でオブジェクトのプロパティと値を出力します。以下の例は私にとってはうまくいきます。

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

$プール | メンバーの取得

   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()
...

$プール | 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
...
于 2016-02-25T04:38:54.907 に答える
12

ヒント#1

Write-Host は使用しないでください。

ヒント#12

PowerShell コマンドレットまたは関数から情報を出力する正しい方法は、データを含むオブジェクトを作成し、Write-Output を使用してそのオブジェクトをパイプラインに書き込むことです。

-Don Jones: PowerShell マスター

理想的には、スクリプトがオブジェクト ( $obj = New-Object -TypeName psobject -Property @{'SomeProperty'='Test'}) を作成し、Write-Output $objects. 出力を にパイプしますFormat-Table

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

実際には、PowerShell PowerObjectandPipingShell を呼び出す必要があります。

于 2013-04-03T16:39:19.027 に答える