Outlook の “会議室の検索” が表示されない場合の対処法

Microsoft 365 (Office 365) など、 Exchange 上の Outlook で新しい会議を作成するウィンドウには、本来であれば 「会議室の検索」 というペインを表示させることができる。
具体的には、以下のスクリーンショットのように、リボンの 「スケジュール アシスタント」 タブに、「会議室の検索」ボタンが存在し、そのボタンによって「会議室の検索」 というペインが切り替えられるようになっている。
本来の表示

ところが、一部のユーザの環境で、この「会議室の検索」ペインも、リボンのボタンも表示されない状態に陥ってしまった。
会議室の検索が表示されない状態

これでは、組織で作成された「会議室の一覧」などが使えず、空き会議室を探すのがとても不便で困る。

ということで、この「会議室の検索」が消える問題の、解消法を紹介する。

続きを読む

Power Automate の式で property doesn’t exist となるのを解消する

Power Automate (旧 Microsoft Flow) で式を記述して実行した時、以下のようなエラーに遭遇することがある。

The template language expression '*' cannot be evaluated because property '*' doesn't exist, ...

特によく遭遇するのが、 HTTP トリガーでヘッダーを参照するときだ。

例えば、 Slack のイベント購読を HTTP トリガーで受ける時に、

triggerOutputs()['headers']['X-Slack-Retry-Reason']

のようにしてヘッダーの情報を参照しようとすると、 このヘッダが存在しない初回の実行時に上述のエラーが発生してしまう。

contains(triggerOutputs()['headers'], 'X-Slack-Retry-Reason') のように、プロパティの有無のチェックの and 論理演算を加える方法 などが紹介されているが、実はもっと簡単な方法がある。

それは、 疑問符演算子 "?" を使うことだ。
(C# で言う Null 条件演算子 のようなもの)

これを使って、

triggerOutputs()['headers']?['X-Slack-Retry-Reason']

と記述すれば、

if(contains(triggerOutputs()['headers'], 'X-Slack-Retry-Reason'), triggerOutputs()['headers']['X-Slack-Retry-Reason'], null)

と等価になる。

各プロパティがオプショナルなものかどうかは、ヘルプを見ればある程度わかるものだが、メンバーアクセス演算子やインデクサー演算子を使う場合は、常に疑問符演算子を併せて使うのがよいのかもしれない。
Power Automate のドキュメント内の "条件付きの式を使用する" などのサンプルでも、常に疑問符演算子がつけられているので。


Power Automate のバックエンドは、 Azure Logic Apps となっているらしく、 式で使える 演算子式関数 、そして 組み込みのトリガー などに関するリファレンスが、 Azure Logic Apps のドキュメントにしか存在しない。

また、 コネクタのリファレンス も、 Power Automate のドキュメントとは別になっている。

同じ情報が二重三重に書かれて内容に同期が取れないような状態になるよりはマシだが、欲しい情報が探しにくいのが辛いところだ。。。

タスクトレイで指令を待ち続ける健気な PowerShell スクリプト

この記事は PowerShell Advent Calendar 2019 の 23日目 の記事だ。
日程が埋まりきっていなかったので、適当な内容で埋めていこう。

あなたは、 PowerShell の短いコードを、 デスクトップのアイコンをクリックするのも億劫なほど、手軽に実行したいと思ったことはないだろうか?

ないって?
私はある。

例えば、ブラウザなどでコピーして WYSIWYG エディターにペタリと貼り付けるときに、クリップボード内の装飾情報を削除したいとか。

(Get-Clipboard -TextFormatType UnicodeText -Raw) -replace '^[ \r\n\t]*|[ \r\n\t]*$','' | Set-Clipboard

PowerShell なら上記のような一行コード実行すれば済む話だ。 しかし、 ウィンドウをシェルに切り替えたり、 ショートカットクリックするのも面倒。 タスクトレイのアイコン一つクリックして実行できたらいいのに。

はい、それを叶えます。

続きを読む

C# REPL GUI Shell, Mono gsharp を Ubuntu に入れようとすると発生するエラーを回避する

.NET Core の登場で大分影が薄くなったものの、 まだまだ Xamarin でガンガン使われている Mono。
この Mono には, gsharp という C# GUI Shell が存在する。

CUI 版の Shell と比べると、 グラフがプロットできるとか、 画像が手軽に表示できるといったメリットしかないが、タブ補完も効くし、まぁ便利っちゃ便利なツールだ。

しかし Windows で gsharp を動かしたくても、 Windwos 用の Mono インストーラには gsharp が入っていないため、そのままでは gsharp を使えない。
このため、 WSL の Ubuntu に gsharp をインストールして、 VcXsrv などの X Server を使って動かすのが手っ取り早い。

以下の記事が詳しい。

ところが、 この gsharp などを含む、 Mono 拡張 GUI ツールを、 WSL を含む Ubuntu ベースのディストリビューションにインストールしようとすると、エラーになってしまう。

今回は、 その暫定的な回避策について。

TL;DR

早く mono/mono#16322 の不具合直した Mono パッケージを出してくれ。

続きを読む

ルータを経由すると仮想ブリッジ接続の VM にアクセスできない?

今回は、ネットワークの話。

解決してみれば割としょうも無いトラブルで、時間を浪費してしまったので、自戒の意味を込めて記事にしておく。

サブネット外から ping が通らない

ある日、 ホストPC の NIC とブリッジ接続されている VM に、 サブネット外からアクセスできなくなってしまった。

構成を図にすると、以下のような感じ。
(あまり UML図 に明るくないので、書き方がヘタクソだったり本来の意味と違う記号の使い方をしている点は大目に見て欲しい。)

data:application/gzip;base64,H4sIAAAAAAAEAIVTPU/DMBDdI+U/nLIihziUAhVC5UOCDmWgqAtlMM61jZTYleOIAbW/Hcdy6qQtwkt8757f3dkv40ozpeuyCIMw4IWsM4gmQqMSqCNgFeQuMFkptJIFRG+yNpjNKrsNA4VcM7EqECJ6lcZ0GA/SODlPBxH8hAGYxWW5kQKFhuhFVhqmjK9zgVZlwy3kmM2yVZeMo2O/Th4tE/W6iT2xU3g+raKuxoHO6/27lRBM9zm+s4PDBwKmNm2boMfMzoDzKTzXWGk3nN3/J5200kmfue2H7gKAfKzzLEPxSY4HMoDPn5BsENjtCa7BEZSoVc6BLgS9ad7wOr4cxmn/rCPDzt7CCPxr0+HpTnct9UHl2Qo9yU22PfKHswZIsRAzViLM6q/WjhtuGtqeNNzFn4brCj7lyyWqBu6pUqvamh1uCdl72ySB3Hmr2y+QTH4LcuYdaTpzYOLBMBijyMzv9QsMZU+SaAMAAA

同一サブネット内 (図の "Machine on Same Subnet") から 172.16.42.16 を叩くと VM ゲストに到達するのだが、 サブネット外 (図の "Machine on Different Subnet") からだと ping すら通らない。

以前は同じ構成で、サブネット外から繋がっていたはずだ。

ちょうど直前に、ネットワーク機器のメンテナンスがあったため、 そちらで IPフィルタの動作がおかしくなったのではないかと疑ってしまった。
しかし、繋がらなくなった直接的な原因は、 VM Gurest 側にあった。
このため、答えにたどり着くのに時間がかかってしまった。

アクセスできなかった原因

続きを読む

Python pipenv で pywin32 をインストールするとエラー

11/10 頃から、 Python でpypiwin32 や pywin32 パッケージや、それらに依存しているパッケージを pipenv にてインストールしようとすると、

AttributeError: module 'site' has no attribute 'getsitepackages'

とエラーが出て失敗するようになった。

10/22 追記: pywin32 v227 で問題は修正された。
"there's nothing wrong with PyWin32, it's just a fix applied on PyWin32's side to work around a VirtualEnv bug." と、修正コメントで強調されている。 わかるよ、その気持ち。
追記ここまで

原因

直接的な原因は、 pipenv ではなく virtualenv にある。

続きを読む

AWX をインストールした後の Server Error を解決したかった話

この記事は、 Ansible AWX をインストールしたときに、 Server Error に なったりならなかったりする 問題に対処したときのポエムだ。

はじめに断っておくが、最終的に AWX 8.0.0 で解消しているっぽいものの、 原因や正確な条件などは不明なままである。
また後述するが、 (タイトルに反して)おそらく Ansible AWX の問題ではなく、 postgres:9.6 の docker イメージの問題ではないかと思われる。

発生した問題の状況

続きを読む

プロキシ環境下で Ansible AWX をインストールする Playbook を作る

構成管理ツール (いわゆる Infrastructure as Code(IaC)) の中でも比較的易しいと言われる Ansible。
その Ansible の運用を省力化してくれるツールとして Ansible Tower というものがあり、そのコミュニティ管理版 (OSS版) が AWX だ。

その AWX がインストールされたサーバを作成する Playbook を作ろうとしたら意外と手間取ったので、そのメモ。

なお、インストール先は CentOS 7 である。
AWX のインストールは、 公式ビルド済み docker イメージを Docker Compose を使ってコンテナ化する方法 を使った。

11/21: 追記

docker-compose の PyPI (pip) パッケージが 1.25.0 に更新後、 CentOS 7 (正確には、 Python 2 系を使っている環境) で docker-compose のインストールや実行がうまくいかなくなった。
(commit:719a1b0 で) subprocess32 に依存するようになり、 gcc 等のビルド環境のインストールが別途必要になったためだ。

それに加え、たとえ gcc をインストールしても、依存パッケージの python2 対応が不十分なようで、 docker-compose 実行時にエラーになってしまう。

docker/compose#7030 の Issue には挙がっているが、修正されるかどうか不明なため、一つ前の 1.24.1 を使うことで回避するように、コードを修正した。

python2 ツラい。。。
しかし、 2020年にサポート切れになった後も、 CentOS 7 が生きているしばらくの間はこの辛みと付き合わなければならないようだ。
ツラい。。。

追記ここまで

最終的な Playbook

続きを読む

Proxy 下で vscode の WSL 上の他の拡張機能のインストールに失敗する

プロキシ環境下の vscode で、 WSL 上で拡張機能を動かしたいのに、 インストールインストールに失敗する問題を解決するメモ。

前回の↓の記事は、 『Remote – WSL 拡張が有効にできない』問題だったが、今回は『Remote – WSL 拡張 を有効にした後、その環境上で他の拡張機能がインストールできない』問題なのでちょっと違う点に注意。ややこしいね。

遭遇した問題

Visual Sutdio Code (以下、 vscode) へ 無事に Remote – WSL 拡張機能 の "VS Code Server for WSL" のインストールが完了し、 Windows 上から 快適に WSL の環境にアクセスできるようになった。
しかし、 いくつかの vscode の拡張機能は、 Windows 上の環境とは別に WSL 上の環境で改めてインストールしなくてはならない。

そこで、 UI 上の案内に従って各拡張機能で "Install in WSL" を行ったところ、 プロキシ環境下だと以下のエラーが発生してインストールに失敗する問題に遭遇した。

Failed to install extension

パネル上の OUTPUT タブで "Log (Remote Server)" の情報を見ると、以下のようなエラーが発生しているのがわかる。

[remoteagent] [error] Failed to install extension: {拡張機能ID} connect ECONNREFUSED 13.107.6.175:443

settings.json ではプロキシの設定しているし、更には WSL 上の環境変数 (http_proxy, https_proxy) にだってプロキシを入れている。
更には(前述の)前回の記事に倣って、 WSL のコンソール上から code . の立ち上げまで行ってみた。

それでも解消しない。何故だ。

なお、試した vscode のバージョンは、 August 2019 (version 1.38.1) だ。

"Remote [WSL]" 用の設定ファイルを書き換える

続きを読む