Get-VpnConnection が一部の Windows VPN プロファイルを取りこぼす理由
Get-VpnConnection は名前から連想されるより狭い問いに答えます。ネイティブの保存域は一つ、範囲も一度に一つだけで、サードパーティ製 VPN クライアントはまったく見えません。
Get-VpnConnection と入力しても何も返らず、調査はたいていそこで止まります。この空の出力は、トンネルが通信を運んでいても、マシンに VPN がまったくない証拠として読まれます。コマンドは正しく、何を一覧するかという前提のほうが誤っています。このコマンドは一つの範囲で一つのネイティブ保存域を読むだけで、独自のプロファイルを持つクライアントについては何も知りません。
呼び出しごとに一つのネイティブ保存域
まずは、サインイン中のアカウントに属するプロファイルを対象とする引数なしの呼び出しから始めます。多くの人が最初に実行するのはこの呼び出しです:
Get-VpnConnection
返される各オブジェクトは Name、ServerAddress、TunnelType、ConnectionStatus を持ち、この四つのフィールドだけでチケット内の二つの項目を区別できます。プロファイルは何か月も切断されたまま一覧に残ります。オブジェクトが表すのは保存された構成であり、実際の通信ではないからです。ここで結果が空なら、そのアカウントに対してユーザー単位の保存域に何もなかったという意味です。人が通常そこから読み取る主張より、ずっと小さい主張です。
全ユーザーの電話帳には専用のクエリが要る
すべてのアカウントに提供されるプロファイルは別の一覧にあり、既定の呼び出しはそれを読みません。その保存域は明示的に要求します:
Get-VpnConnection -AllUserConnection
セッションに権限がない場合は、空の結果ではなくアクセス拒否のエラーを想定し、二つの結果を別物として扱います。片方は見てはいけないという意味、もう片方は何も保存されていないという意味です。出力が目の前にあるうちに、各名前の横に範囲を記録します。後から実行するコマンドは、どの保存域を問い合わせたかを思い出させてくれないからです。権限は、同僚には見えて自分には見えないプロファイルがある通常の理由です。パラメーター セットは Get-VpnConnection のリファレンス ページ に記載されており、どのスイッチがどのセットに属するかも含まれます。
同じ名前、二つの保存域
プロファイル名はその保存域の中で一意であり、マシン全体で一意ではありません。そのためユーザー単位の一覧と全ユーザーの一覧が、それぞれ Office という名前のプロファイルを持てます。二つの項目は別のサーバーを指し、別のトンネルの種類を使い、別の資格情報を持つことがあります。ユーザーがダブルクリックするのはそのうちの一つだけです。どちらかに触れる前に範囲を記録してください。
誰も起動しないほうのコピーを削除するのは、変更作業の場では無害に見えます。ユーザーのショートカットが動かなくなったときに、サポートへの電話になります。
ネイティブの一覧に一切触れないクライアント
ベンダーのクライアントにインポートされた OpenVPN または WireGuard のプロファイルは そのクライアント自身の構成の中にあり、ネイティブの Windows エントリにはなりません。クライアントは自前のサービスを動かし、自前の一覧を保ち、自前のアダプターで通信を通します。そのどれもコマンドが報告する内容ではなく、範囲のスイッチを切り替えても現れません。一台のマシンに三つの稼働中のトンネルと、空のネイティブ一覧が同居できます。
代わりにアダプターの表示が必要なときは、アダプターに問い合わせます。ベンダーのインターフェースは自分で名乗るので、正確な文字列ではなく断片で照合します:
Get-NetAdapter | Where-Object InterfaceDescription -match 'WireGuard|OpenVPN|TAP'
手作業で作ったネイティブのプロファイルはユーザー プロファイル配下の電話帳ファイルに入り、全ユーザー向けの同等品はマシン全体のコピーに置かれます。そのため、あるユーザーのプロファイル保存域を別のアカウントにコピーしても、同じ一覧が再現されることはほとんどありません。このファイルは、迷子になったネイティブ接続がどこから来たかを説明します。ベンダー クライアントの保存域については何も語りません。
プロファイルを削除する前に記録すべきこと
安上がりの保険は五つのフィールドを持つメモです。名前、範囲、サーバー アドレス、状態、そしてユーザーの試行から得た正確なエラー テキストです。実際に起動しているクライアントを加えてください。その詳細が、ネイティブの項目に意味があるかどうかを決めるからです。それがなければ、正しい削除でも次の失敗の原因に見えます。メモはチャット ウィンドウではなくチケットに残してください。
削除はコマンド一つで、構成を無効化するのではなく消します。そのメモが存在してから初めて実行します:
Remove-VpnConnection -Name "Office" -Force
対象が全ユーザーの保存域にある場合は -AllUserConnection を加え、承認済みの構成ソースを先に別の場所へ保管します。そのうえで一度再接続し、ルート テーブルを読みます。一覧が証明するのは構成が保存されていることだけだからです。通信がサーバーに届くかどうかは別の問いであり、Get-VpnConnection の出力をどれだけ見ても答えは出ません。きれいに追加し直した後もユーザーが失敗するなら、プロファイルが問題だったことは一度もありません。