🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PowerShell

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Q&A

解決済

1回答

2618閲覧

Powershellにて、Get-AppxPackageのCSV出力について

Sho-Ken

総合スコア1

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PowerShell

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

0グッド

0クリップ

投稿2020/12/28 00:55

前提

以下のコマンドを実行した結果をcsvに出力したいと考えています。

Get-AppxPackage -AllUsers | Select PackageFullName,Name,PackageUserInformation

出力サンプルは以下の通り

PackageFullName Name PackageUserInformation --------------- ---- ---------------------- Microsoft.ZuneMusic_10.20112.10111.0_x64__8wekyb3d8bbwe Microsoft.ZuneMusic {S-1-5-21-SIDにつき一部省略1 [ログインユーザー1]: Installed, S-1-5-21-SIDにつき一部省略2 [ログインユーザー2]: Installed}

何も考えずにcvs出力したいときは、以下のコマンドを実行すると思います。

Get-AppxPackage -AllUsers | Select PackageFullName,Name,PackageUserInformation | ConvertTo-CSV

すると、以下のような出力になります。

"Microsoft.ZuneMusic_10.20112.10111.0_x64__8wekyb3d8bbwe","Microsoft.ZuneMusic","Microsoft.Windows.Appx.PackageManager.Commands.AppxPackageUserInformation[]"

この出力だと、Selectで出力できていた情報「PackageUserInformation」が出力できなくなってしまいます。

達成したいこと

「PackageUserInformation」部分をcsv出力するとき、以下のようにただSelectを実行した時と同じ様な文字列として出力したいのが目的です。

"Microsoft.ZuneMusic_10.20112.10111.0_x64__8wekyb3d8bbwe","Microsoft.ZuneMusic","{S-1-5-21-以下省略1 [ログインユーザー1]: Installed, S-1-5-21-以下省略2 [ログインユーザー2]: Installed}"

どのような加工/コマンドを実行すれば達成できますでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

こちらでいかがでしょうか

PowerShell

1get-appxpackage -allusers | Select-Object -Property PackageFullName,Name, @{ 2 label='PackageUserInformation' 3 expression={($_.packageuserinformation)} 4 } | ConvertTo-Csv

追記

上のコードだとpackageuserinformation部分のデータ区切りのカンマが消えてしまうので
カンマが必要であれば下のようなコードが良いです。

PowerShell

1get-appxpackage -allusers | Select-Object -Property PackageFullName,Name, @{ 2 label='PackageUserInformation' 3 expression={($_.packageuserinformation -join ',')} 4 } | ConvertTo-Csv

補足
配列データのプロパティ(今回だとPackageUserInformation)だとselectでの出力形式とconvertto-csvの出力形式で違いがあるので上記のような加工が必要になります。

投稿2020/12/28 09:30

編集2020/12/28 11:24
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Sho-Ken

2021/01/04 23:24

返事が遅れて申し訳ありません。 この質問の投稿以降で、以下のようなコマンドで目的を達成しようとしていました。 ===================================== Get-AppxPackage -AllUsers | Select-Object PackageFullName,Name,PackageUserInformation -OutVariable Out; foreach($tmp in $Out){ $OutOneLine = $tmp.PackageFullName + ',' + $tmp.Name + ','; $OutAllOneLine = $OutOneLine; foreach($user in $tmp.PackageUserInformation){ $OutUsers = $OutAllOneLine + '|' + $user; $OutAllOneLine = $OutUsers }; echo $OutAllOneLine; } ===================================== これで目的は達成できないことはないですが、 ほぼコーディングなため、回答がなければそのまま進めようとしました。 しかし、運良く回答が来たので、それの検証を行いました。 回答者の簡潔なコマンドを実施すると、自作のコマンドより完結で、正確なcsv形式のデータの出力になることを確認できました。 よって、回答者の簡潔なコマンドを採用したいと思います。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問