PowerShell でインストール済プログラム一覧を取得する

PowerShell を Windows の管理ツールとしてみたときに、割と昔から意味がわからないと思っていることが 1点 ある。
Windows のインストール済みプログラム一覧を取得するコマンドがないことだ。

もう少し具体的に言うと、appwiz.cpl で開ける、コントロールパネルのプログラムと機能の一覧や、 設定の「アプリと機能」の一覧を取得するコマンドレットがない。
コマンドレットがないだけじゃなく、コードを書いて取得する確立して手段すら存在しないのだ。

とりあえず、それに近い情報がとれる代替方法として、レジストリのアンインストーラー一覧を取得する方法が知られている。
ただ、ググってもあまり PowerShell らしい綺麗 (?) なコードで書かれているサンプルが少なかったので、ワンライナーで書いてみる。

Get-ChildItem -LiteralPath (('HKLM:', 'HKCU:' | %{ "${_}\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" }) + 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall') | Get-ItemProperty -Name DisplayName, DisplayVersion, Publisher, InstallDate -ErrorAction Ignore;

これで取得した内容を | Sort-Object DisplayName, DisplayVersion| Select-Object DisplayName, DisplayVersion などにパイプしてから使うと良いだろう。


ちなみに WMI の Win32_Product クラスを使って取得する方法 (Get-CimInstance -ClassName Win32_Product) は、

  • MSI でインストールしたアプリしか取得できない
  • コンピューターはMSIがインストールされているすべてのアプリケーションを再検証するので、負荷がかかるし遅い

と言うことから使うべきではないとされている。

VPN に繋ぐと WSL2 や Hyper-V VM でネットワークに繋がらなくなる問題を解消する

OpenVPN や Cisco AnyConnect, GlobalProtect 等といった VPN に接続した際、 Hyper-V 仮想マシン内からや、 WSL2 のディストリビューション内、 Windows Sandbox 内、 WSL2 ベースの Docker コンテナ内 等々、 Hyper-V 系の技術を使った仮想環境から、 PC 外のネットワークにアクセスしようとすると、 以下のようなエラーが発生して失敗する。

$ # curl 利用時の例
curl: (6) Could not resolve host: example.com
curl: (5) Could not resolve proxy: proxy.example.com

$ # apt で更新しようとした場合の例
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal/InRelease  Temporary failure resolving 'proxy.example.com'

エラーの内容からわかるとおり、アクセス先やプロキシーのドメイン名を DNS で解決できなくなっている。

このような問題が発生することは以前から知っていたのだが、このご時世で VPN 使うことが増えてきて、いい加減鬱陶しくなってきたので、なんとかしようと思う。

解決方法

とりあえず、まずは 2種類 の解決方法から。

続きを読む

Raspberry Pi で作るネットワークエミュレータ

明けましておめでとうございます。

この記事は、 Raspberry Pi Advent Calendar 2020 24日目の記事だ。
…遅刻すぎるのもいいとこだわ。


さて、ネットワーク回りの仕事をしていると、意図的にネットワークの遅延やパケロスを発生させて、検証したくなる状況がままある。

対象のサーバーにネットワークを遅延させるようなモジュール入れるようなやり方も考えられるが、もっと手軽に、 LAN ケーブルの間に挟むだけで、そこを通る通信が全て遅延するみたいな、そんな機材が欲しくなる。

もちろん、そのような需要があれば、それに応える製品があるわけで、それらは一般的に「ネットワークエミュレータ」として売られている。
しかし、高いものでは数百万を軽く超え、安くても数万円はするものばかりだ。

なんか安く作れないかなぁ…
Raspberry Pi あたりで。

…ということで、 Raspberry Pi 4 を使って、遅延とパケロスを制御できる、お手軽ネットワークエミュレータを作ってみよう。

先駆者

そもそもなのだが、そのものズバリなことを実践している先駆者様がいらっしゃった。

この記事の Raspberry Pi には、小型ドットマトリックス LCD ディスプレイや、様々な物理キーが GPIO に繋がっていて、 THE IoT という仕上がりになっている。

かっこいいと思う。
でも、電子工作するのめんどくさいよね。

GUIで手っ取り早く作る

そんな複雑 (…というほど複雑でもないけど) な電子工作しなくても、 RasPi にタッチパネルディスプレイつけちゃえばいいじゃん。
…ということで、 Amazon で割と評判のよい、 OSOYOO の 2,980円 タッチスクリーン付き LCD を取り付けて、めっちゃ簡単な UI をつくってみよう。

OSOYOO(オソヨー) HDMI 3.5 インチ LCD ディスプレイ IPS モニター IPSタッチスクリーン 1920x1280ハイビジョン Raspberry Pi 4 3 2 Model B に対応 (3.5" HDMI LCD+クリアケース)

もはや、 IoT 感を感じるのが難しくなってしまっているな……

続きを読む

.NET Interactive で C# と PowerShell を股に掛ける

この記事は、「C# Advent Calendar 2020」 9日目の記事、かつ 「PowerShell Advent Calendar 2020」 9日目の記事だ。

スミマセン。横着した。

この時期になれば .NET Interactive の Preview 4 が出てるだろうしその記事でも書こうかな~ などと目論んでいたものの、 残念ながら登場しなかった。

このため、 .NET Interactive .NET 5 対応版の導入と、 Variable sharing の内容でお茶を濁そうと思う。

.NET Interactive のなんたるかについては、以前の以下の記事で取り扱っているので、そちらを参照願いたい。

.NET Interactive を .NET 5 で動かしてみる

いきなり本題とは関係ない話になるが、 せっかく .NET 5 がリリースされたところなので、 .NET Interactive を .NET 5 で動かしてみよう。

続きを読む

[v2021.6.15s 対応] Among Us 用超便利 Discord bot “AutoMuteUs” をセルフホストする方法 (公式推奨簡単版)

注: この記事は、 2020年11月23日~25日 時点の話を基にして、 一部 2021年7月 現在の内容に更新しているよ。 状況は今後も刻々と変わる可能性が高いよ。
なお 7月9日 現在、 Among Us バージョン v2021.6.30s では、 以下の手順で問題なく動いていることを確認している。

うまく動かすコトができない場合は、記事の最後にトラブルシューティングも用意したので、そちらを参考にして欲しい。


2020年の夏あたりから、日本でも爆発的なブームが続いており、 宇宙人狼, アモアス 等とも呼ばれている Among Us

Discord でボイスチャットしながらやるのが面白いのだけれど、 ゲームの仕様上、ミュート管理が結構面倒だ。

そこに、 Among Us のゲーム画面に同期してミュート管理を超いい感じに自動で行ってくれる Discord bot が存在する。

それが AutoMuteUs だ。

このツールは、 以前は "AmongUs AutoMute" などとも呼ばれ、 誰か一人が Windows Steam 版 Among Us のゲームと一緒にキャプチャープログラムを立ち上げ、 公式の Discord Bot と連携させるだけで超お手軽に使える…
…はずだった。

1月下旬現在、 AutoMuteUs 公式の手順に従って、 bot の .au new コマンドでゲームを作成しようとすると、以下のような悲しいメッセージを目にするだろう。

If I start any more games, Discord will lock me out, or throttle the games I'm running! :frowning:
Please try again in a few minutes, or consider AutoMuteUs Premium (.au premium)
Current Games: 151/150

Discord 側の制限で、これ以上 bot を実行できないって。
しばらく待つか、有料の AutoMuteUs Premium を使ってくれとのこと。

そして、仮にゲームの作成が無事にできたとしても、 bot のミュート変更が遅れたり、変更しそびれたりと不安定だったり…

そこで、 AutoMuteUs のサーバーを自分で実行 (セルフホスト) することで、上記の制限を無料で回避してしまおう というのが、この記事の目指す内容だ。

記事内では画像とテキストで導入手順を解説しているが、 それだけではわかりにくい場合、 こちらに本記事の内容を解説する動画も作成しているので、併せて見ていただくとわかりやすいだろう。

ちょっと古い v2.4.3 をセルフホストするのが推奨

続きを読む

Raspberry Pi に Ubuntu を入れて SSH でログインするまでの A to B

追記:

以下の記事で、 Raspberry Pi 5 と Ubuntu 24.04 LTS の組み合わせで更新した内容を掲載しているので、基本的にはそちらを参照してほしい。

何番煎じかわからないが、 Raspberry Pi (以下、 RasPi) に Ubuntu を入れる手順についてまとめてみようと思う。

Ubuntu 公式の How to install Ubuntu on your Raspberry Pi チュートリアルは充実しているし、 単にインストールして動かすだけなら、既にある記事でも十分だろうとは思う。
しかし、初回セットアップ時の細かいカスタマイズについて書かれているものがあまり見当たらず、 ディスプレイなし かつ Wi-Fi 接続のセットアップ方法などを、詳しく解説されているようなものが見つからなかった。

本記事では、それについて補足しながらまとめていく。

先に断っておくが、 cloud-init による IaC の話が中心になる。

TL;DR

  • 焼いた SD を RasPi に挿すにブートプロセスの設定を書き換える
  • cloud-init の挙動を理解しろ
  • ディスプレイなし & 無線LAN Only だと、工夫がいる
  • ARP リクエストのブロードキャストが届かないと苦労する

きっかけ

続きを読む

激安液タブPC: CHUWI UBook 11.6″ CWI509 お絵かきレビュー

親戚が簡単なお絵かきができる 2-in-1 タブレット PC を欲しがっているということなので、 セールしていた CHUWI UBook を入手してみた。

中華PCを人にオススメするのもどうかとは思ったが、一応 技適もとってる 日本向けのモデルだし、予算と目的がバッチリ一致するので、お絵かき用途ならこれでいいかなと。
10万近くかけて高いノートPC買うほどではものの、そもそもプライベートの PC も持ってないらしいので、基本的人権のメモリ 8GB はある安いの探してたのよね。

買ったマシンのキッティングを行うにあたって、 Windows OS 搭載の一体型液タブとして見てどうだったのかをレビューして見ようと思う。

購入したモデル

今回購入したのは CHUWI UBook と言うモデル。

主なスペックは以下の通り。

続きを読む

.NET Interactive の C# REPL を Jupyter で

今回は、 .NET Interactive を利用し、ローカルマシンで C# や PowerShell Core の REPL を利用するまでをまとめる。

なお、 とりあえず動かしてみたいだけであれば、 Binder バッジのリンクをクリックして、 オンライン上の Binder にブラウザにアクセスするだけで、利用することができる。
Use Jupyter with .NET Interactive on Binder

.NET Interactive とは

.NET Interactive は、 以前 Try.NET と言う名前で提供されていた、 .NET のインタラクティブな機能を提供する API スイートだ。
JupyterLab に .NET カーネルを追加する形で、 REPL の実行やノートブックの作成する仕組みを提供することが、 主なユースケースとなっている。

REPL ではコード補完も効くので、非常に便利なものになっている。

Jupyter について

まず、 Jupyter についても軽く説明しておく。
既にご存じなら読み飛ばして欲しい。

JupyterLab とは?

続きを読む

OPPO Reno A のカメラの結露の水滴が取れないことに四苦八苦した話

久々にしょーもない話をひとつ。

ある日、自分のスマートフォンを見たら、前後のカメラのレンズの部分結露して、水滴がついてしまっていた。

そのスマホで写真を撮ってもごらんの有様↓

大きな寒暖差がある冬場の季節でもないし、そもそもこのスマホ (OPPO Reno A) は防水であり、最近 SIM カードスロットを開け閉めした覚えもない。
どこから水分が入ってしまったのか…

思い当たる節と言えば、先日このスマホに石けん水がかかってしまったことぐらいだろうか。
多分それだな。
(※ 「石けんで洗える」などと特記されているもの出ない限り、防水であっても石けん水だとパッキンから流入してしまうことが多い。 また、そもそもとして防水であっても防湿ではない。)

とりあえず乾燥剤とともにジップロックにぶち込む

原因はともかく、とにかく症状が悪化してしまう前に、なんとか本体内の水分を取り除きたい。

幸いにも、私は過去にも数々の電子デバイスを水没させてきた実績があるので、このようなことは慣れたもの。

スマホの SIM カードを入れるパッキンを取り外して、 いつものように乾燥剤とともにジップロックにぶち込んで一晩寝かせる。


……

水滴取れてへんやないかいっ!

ドライヤーの風を、本体を傷めない程度に離した距離から(具体的には、その風を手にも当ててそれほど熱くならない状態)あててみて、内部の水分を飛ばしてみる。

暖めた直後は結露がなくなるのだが、しばらく経って温度が下がるとまた結露する。

水分の逃げ道が無くなってるな、コレ。

続きを読む

大量の nanaco ギフトを自動登録して、オトクに税金を支払う

本記事は、 CUI のコンソール画面から使用する中級者向けのツールのに関する内容だ。
別途、 簡単に使用できる GUI 版も作成したので、そちらについては、以下の記事も参照。


突然だが、自動車税や固定資産税などの税金や、公共料金などの払込票などを、どのように支払っているだろうか?
支払う額も大きくなりがちなので、なるべくお得に支払いたいのではないだろうか。

そこでオススメなのが nanaco ギフト だ。

クレジットカードで直接納税したり nanaco 残高にチャージする場合、手数料がかかったり、ポイントがたまらなかったりと、あまりお得にならない。
しかし nanaco ギフトであれば、額面よりも安く入手する手段が知られている。

  • ベネフィット・ステーション
    • 福利厚生型の会員制割引サービス。
    • 2020年4月現在、 毎月 10万 円分まで 額面の 2% OFF で nanaco ギフトを購入できる。
    • 所属組織による団体加入か、 「ベネフィット・ステーション プライベート」 や 「デイリーPlus」などといった個人向けの有料サービス、 「(JACCS カードの) J’s コンシェル」などの付帯サービスで利用できる。
  • Kiigo (廃止)
    • 以前はクレジットポイントを貯めながら nanaco ギフトを購入できたのだが、 2019年 に nanaco ギフトの取り扱いがなくなってしまった。
  • ちょコムショップ
    • NTT系列の決済会社が運営する、電子マネー購入サイト。
    • 0.5% OFF 程度で、一部ブランドのクレジットカードを使って購入できる。 クレジットカードのポイントと併せればそこそこお得に購入できる。

また nanaco 残高と違ってセンターお預かりへのチャージなので、 チャージ残高の上限が非常に高く (50万円以上も可能らしい)、 nanaco 残高のチャージ上限である 5万円を超えるような金額の支払いでも使える大きなメリットがある。

nanaco ギフトでのお得な納税の話は、他のサイトでもっと詳しくわかりやすく書かれているだろうから、これくらいにしておく。

nanaco ギフトの登録がめんどくさい

さて、 ここからが本題だ。

そんな nanaco ギフトにもひとつ 大きな欠点がある。
それは、 1,000 円単位で提供されることが多い ということだ。

例えば 10万円分 チャージしようとすると、 100 回も nanaco ギフトID のコードを入力しなくてはならないのだ。

更に、 nanaco ギフトの登録を行う UI が、大量のギフト登録に とても優しくない
1回 コードを入力する毎に nanaco にログインしたり、 コードを 4文字 ずつテキストボックスに入力しなくてはならなかったりと、 数をこなすのにとにかく手間がかかるのだ。

10万円 の納税で 2,000円 得するために、 2,000円分 相当以上の手間をかけるのでは愚の骨頂だ。
こうなったら、自動入力させるしかない。

続きを読む