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

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

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

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

Q&A

解決済

1回答

1777閲覧

リストテーブル? の扱い方が分からない

kamikazelight

総合スコア305

PowerShell

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

0グッド

0クリップ

投稿2018/09/14 08:00

前提・実現したいこと

指定されたドライブの情報を返す関数を作っているのですが
結果をリストテーブル? で返したいです。
そのあと受け取った側で特定の項目の値を取得したいです。

試したこと

ちゃんとしたリストテーブルの作り方が分からず
困っていたところ
ハッシュテーブルからリストテーブルに変換する方法が見つかったので
ハッシュテーブルの作り方を調べてとりあえず作ってみました。が、
例えば、受け取った結果から Name の情報だけ抜き出そうとしても
取得できません。
どうしたらいいでしょうか。

あと、もっとちゃんとしたリストテーブルの作り方があるのであれば
教えて頂きたいです。

pwoeshell

1function _Get_DriveInfo ([string]$Name) { 2[OutputType([System.Management.Automation.PSDriveInfo])] 3#引数で指定されたドライブの情報を返す# 4 [System.Management.Automation.PSDriveInfo]$Info = Get-PSDrive | Where-Object{$_.Name -eq $Name} 5 if($Info -eq $null) 6 { 7 return $null 8 } 9 $NetDriveRoot = $($(Get-WMIObject -query $("Select * From Win32_LogicalDisk Where DeviceID='" + $Name + ":' and DriveType = 4")).ProviderName) 10 if($NetDriveRoot -eq $null) 11 { 12 $SubstDrive = $(subst) | Where-Object{$_.substring(0,$_.indexof(':')) -eq $Name} 13 if ($SubstDrive -eq $null) 14 { 15 $DriveInfo = @{Name = $Name ; Root = $Info.Root ; Type = "Hardware"} 16 } 17 else 18 { 19 $DriveInfo = @{Name = $Name ; Root = $($SubstDrive -split '\:\\: => ')[1] ; Type = "Phantom"} 20 } 21 } 22 else 23 { 24 $DriveInfo = @{Name = $Name ; Root = $NetDriveRoot ; Type = "Remote"} 25 } 26 $DriveInfo | %{New-Object psobject -Property $_} | Format-Table -Property Name,Root,Type 27} 28 29$DriveInfo = _Get_DriveInfo -Name "C" 30 31#ちゃんとコンソールに表示される 32$DriveInfo 33 34#結果が返ってこない.... 35$DriveInfo.Name 36 37#リストが空.... 38$(_Get_DriveInfo -Name "C") | Select-Object -Property Name

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

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

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

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

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

guest

回答1

0

ベストアンサー

「リストテーブル」が何を指すのかよくわかりませんが、とりあえず1点。

Format-と名前のついているコマンドレットは、「結果をコンソールで表示するときのみ」使用するべきもので、関数の結果として返すのは適当ではありません。

Format コマンドを使用した出力ビューの変更 | Microsoft Docs

恐らく_Get_DriveInfo関数内のFormat-Tableへのパイプを消せば意図した結果になると思われます。

投稿2018/09/14 09:00

imihito

総合スコア2166

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

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

kamikazelight

2018/09/14 09:49

ありがとうございます。 目的にしていた結果になりました。 ところで この結果のデータの並びの事はなんと言ったらいいのでしょうか?
imihito

2018/09/14 10:03

回答のリンク先の言葉を借りるなら「表形式」でしょうか。 「コンソールに結果を表形式で出力したい場合は`Format-Table`へパイプする」、といった雰囲気です。
kamikazelight

2018/09/14 10:22

今回 初めて psobject の存在を知りました。 私は使いたいのは'System.Collections.Generic.List`1[System.String]'だと思っていたのですが勘違でした。 求めていたのは教えて頂いた表形式のpsobjectのようです。 今回もありがとうございました。 またよろしくお願いいたします。
imihito

2018/09/14 11:12

psobjectでもプロパティが5個以上になるとリスト形式(`Format-List`)がデフォルトになるようですね。 1..5 | % {$ht = @{}} {$ht.Add( $_, [Math]::Pow($_,2) )} {New-Object -TypeName psobject -Property $ht} ちなみに`Out-String`を使用すると、コンソール出力をそのまま文字列として取得できたりします。 単一文字列なので自分で行分割する必要がある&余分な空行があったりしてやや扱いにくいですけれど
kamikazelight

2018/10/10 00:40

一か月も気付かずすみませんでした。 追加の情報までありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問