3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Powershell インストールされたアプリのだいたいのリストを出力する

Posted at

ソフト(ウェア)なの?アプリ(ケーション)なの?

最近あいまいですね。
昔はハードの性能主体だったのでハードに対してソフトと言っていたのですが、いまはハードから独立しているのと、そもそもVBAとかではアプリケーションやexeでソフトウェアと呼ばれないこと、さらにスマホがアプリと呼んでいるのでそちらの影響が大きいこともあるでしょう。
もっとも会計基準などではソフトウェアと呼ばれているのですが。
さらにプログラムもあります。

コントロールパネルの内容をリストにしたい

主だったソフトウェア(アプリ)のリストを取得する
なるべくならインストールした日が知りたい
さらに容量も知りたい
というテーマです

Windows10とWindows11

Windows11では プログラムの追加と削除 はインストールされているアプリに変更されています。
というかプログラムのアンインストールと変更というのもあります。
ある意味正しいかも。
しかしこれ自体はアプリのというカテゴリにあるのですが、

  • インストールされているアプリ
  • アプリの詳細設定 アプリの取得、アーカイブ、更新のアンインストール
  • 既定のアプリ ファイルの既定値、リンクの既定値、その他
  • オンラインマップ ダウンロード、保存場所、マップの更新
  • Web用のアプリ ブラウザーではなくアプリで開くことができるwebサイト
  • ビデオの再生 ビデオ調整、HDR、ストリーミング、バッテリーオプション
  • スタートアップ サインイン時に自動的に開始されるアプリ

とビデオの再生といったバッテリーオプションまでいくところもあり、なんだかよくわからないものが混ざっています。
とにかくWindows10ではプログラムの追加と削除ですが、Windows11ではインストールされているアプリになります。
ただし
Windows でアプリとプログラムをアンインストールまたは削除する

アプリまたはプログラムが見つからない場合は、「Windows 10内のすべてのアプリを表示する」のヒントを試してください。プログラムはインストール後にプログラムの追加と削除に一覧表示されません。
とまたいい加減なことがかいてあります。

あとプログラムと機能は、こちらで開けます。あとから述べますが、これはこういう使い方しかできないようです。

Get-ControlPanelItem "*機能*", '*Feat*' | Show-ControlPanelItem

FeatはCannonicalnameです。プログラムと機能 Microsoft.ProgramsAndFeaturesを拾っています。

WOW6432Nodeのレジストリはバージョンに違いがある?

今回はこちらを参考に作成させていただきました。
https://qiita.com/sakekasunuts/items/106f9c0f828a07e81592

コントロールパネルだからと言って、検索してはいけない

※リンクは5.1ベースです
探すとGet-ControlPanelitem
Show-ControlPanelItem
が出てきますが全く関係ありません。`
なおGet-ControlPanelitemはWin8以降、Show-ControlpanelItemはWin10以降です。
同じVer5.1でもOSにより使えるかどうかが異なっています。
Windows10ではこれらを組み合わせることでコントロールパネルを開くことができます。

image.png

これから出すリストは名前が空白が出て、数が合わない

Windows ロゴキーを押しながらRで「ファイル名を指定して実行」でPowershellと入力して立ち上げてから、
以下を貼り付けます。Powershell7だと警告が出ます。
またDドライブに作ることを想定しています。既存のファイルと同名の時は注意してください

if (test-path D:\InstalledAppList.csv){Remove-item D:\InstalledAppList.csv};Get-ChildItem -Path(
'HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',
'HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',
'HKLM:SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall') |
% { Get-ItemProperty $_.PsPath | Select-Object DisplayName, DisplayVersion, Language, Publisher, EstimatedSize, Installdate  , UninstallString } | Sort-Object DisplayName | Export-Csv -NoTypeInformation -Noclobber -Encoding utf8 D:\InstalledAppList.csv

WOW6432の違い

参考にさせていただいたサイトは最後
Uninstalになっていましたが、手持ちのWindows10とWIndows11ではUninstallとL(エル)が2つになっていました。これはレジストリも同じでした、バージョンの違いでしょうか。

https://www.powershellgallery.com/packages/PSWinGlue/0.3.1/Content/Functions%5CGet-InstalledPrograms.ps1
こちらのように存在したら追加する方がいいのかもしれません。

出力される数の違い

手持ちの環境ではプロブラムの追加と削除では60くらいですが、これで出力すると90以上になります。
また名前のない空白行が多く出ます。これは
'HKLM:SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall'
ここを削ると40くらいに減ります。空白行も3つです。
まずこの空白の原因ははっきりとしないのですが、アンインストールやパスにAdobe がでてくるのでADOBEのもののようです。
完全な空白はよくわかりません。

つまり手持ちの環境で出力された数をまとめると、

  1. Win10 プログラムのアンインストールまたは変更 約60
  2. これで出力した数 名前が空白を除くと約90
  3. Win11 インストールされているアプリ 約110
となっています。しかし3.は言語パックなどがカウントされています。つまりインストールされているアプリを表示するものになっているようです。 なので2.は1.を網羅しているので1.と合わせて修正して完成するようです。 1~3の差はよくわかりません。 なお、2.は「更新されたプログラムのアンインストール」はリストに含まれていませんでした。 これも環境やアンインストールによって変わってくると思われます。

UnistallStringで削除しない方がよい

つまりこのことから、1.とは違う、2.で得られる UninstllStrig で削除するのはどこに影響するのかわからないので、基本的にUnitstallStringでインストールすべきではないことがわかります。少なくとも1.の方が安全です。
Windows11はすべてのプログラムからアンインストールする手順を基本としています。(ないときはWindows10と同様コントロールパネル)

出力項目はレジストリの項目

Select-Objectの各項目はレジストリから来ているようです。
しかし、各アプリがレジストリに登録している項目数は異なっています。
また項目があっても空白になっているということもあります。
上記のスクリプトでは、おおむね持っていそうなものをすべて上げるようにしていますが、名前があるものでも、空白は存在します。

現状で日付が文字列

一番単純な解決方法はExcelに出力した後変換することでしょう
=DATEVALUE(LEFT(F33,4)&"/"&MID(F33,5,2)&"/"&RIGHT(F33,2))
こんな感じですね。なおセルを日付形式に変えます
しかし、先に出力された方が楽なのですが、現在はわかっていません。
https://tech.guitarrapc.com/entry/2012/12/20/211206
@{Name = "InstallDate";Expression = {$_.ConvertToDateTime($_.InstallDate)}}
こうかな?と思ったのですが、効きませんでした。パターンが似てるので有効かなと思ったのですが無理でした。
こうしたい場合には
https://www.powershellgallery.com/packages/PSWinGlue/0.3.1/Content/Functions%5CGet-InstalledPrograms.ps1
こちらのようにした方がいいのかもしれません。

まとめ

とりあえず出力することはできる。
しかしプログラムの追加と削除より多い。
突き合わせて減らして整形。
日付を変換する。
一応、これで出力はできます。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?