質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

2458閲覧

Psobject に追加したプロパティー名を 追加した順に 取得したい

kamikazelight

総合スコア305

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2018/11/09 08:09

編集2018/11/09 08:13

前提・実現したいこと

過去の質問でプロパティを文字列で
指定する方法は分かったのですが
前の方法だとpsobjectにプロパティーを追加した後
コピーして複数のスクリプトブロックで処理したい時などに
元のプロパティー名の配列をそれぞれのスクリプトブロックに渡さないといけなかったり、
Import-CSV等で取得した場合等に使えないので
出来ればそのpsobjectから追加した順にプロパティ名を取得したいです。
方法はあるのでしょうか?

試したこと

get-memberで拾ってみましたが しっかりソートされてます。
ですが‘Format-Tableでは ちゃんと追加した順で表示されます....
どっかに保持されているとは思うのですが見つけられません

powershell

1$test = $(New-Object psobject | select D,C,A,B) 2$test | Get-Member | where {$_.MemberType -eq "NoteProperty"} | foreach {$_.Name} 3$test | Format-Table 4#Get-Member結果  5# A 6# B 7# C 8# D 9 10#Format-Table結果 11# D C A B 12# - - - -

補足情報(FW/ツールのバージョンなど)

Win10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Get-MemberコマンドレットにはForceスイッチがあり、これを使うといくつかの追加のメンバーを確認することが出来ます。

例えばCompare-Objectコマンドレットを使って差分を抽出すると下側(Plain text)の結果が得られます。

powershell

1[psobject]$test = New-Object -TypeName psobject | Select-Object -Property D,C,A,B 2 3[hashtable]$compareArgs = @{ 4 ReferenceObject = Get-Member -InputObject $test 5 DifferenceObject = Get-Member -InputObject $test -Force 6} 7Compare-Object @compareArgs | Select-Object -ExpandProperty InputObject

text

1 TypeName: Selected.System.Management.Automation.PSCustomObject 2 3Name MemberType Definition 4---- ---------- ---------- 5pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.S... 6psadapted MemberSet psadapted {ToString, Equals, GetHashCode, GetType} 7psbase MemberSet psbase {ToString, Equals, GetHashCode, GetType} 8psextended MemberSet psextended {D, C, A, B} 9psobject MemberSet psobject {BaseObject, Members, Properties, Methods, I...

これらのうち、.psobject.Propertiesが追加されたプロパティを示すものだと思われます。

powershell

1$test.psobject.Properties | 2 ? { $_.MemberType -eq [System.Management.Automation.PSMemberTypes]::NoteProperty } | 3 Select-Object -Property Name, Value

text

1Name Value 2---- ----- 3D 4C 5A 6B

参考

Add-Member を極める - 鷲ノ巣

投稿2018/11/09 09:50

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamikazelight

2018/11/09 11:21

いつもありがとうございます! そんな隠された要素があったのですね 後で確認します!
kamikazelight

2018/11/09 15:35

確認しました。 Get-Member は前から使える子だとは思っていましたが 力を引き出せていなかったようですね^^; また宜しくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問