Home > Windows にまつわる e.t.c.

パーセントエンコーディングされた URL を PowerShell でデコードする


結論を先に書くと PowerShell で書くとこんな感じです

[System.Web.HttpUtility]::UrlDecode($EncodeURL)

 

Web ブラウザーに表示されている URL をそのまま UrlDecode に食わせると、デコードしてくれる素敵なメソッドです
(Windows PowerShell 5.x で使う場合は、事前に「Add-Type -AssemblyName System.Web」する必要があります)

 

参考情報

HttpUtility.UrlDecode Method (System.Web) | Microsoft Learn

 

 

どうしてこんなことを調べたかというと、SharePoint でファイルを格納しているフォルダーを共有するために、パンくずで表現したいと思ったのですが、Web UI に表示されているパンくずはうまくコピペができないんですよね...

フォルダーを開いているときの URI を見ると、パーセントエンコーディングされているので、ひょっとしてフォルダー パスがそのまま表現されているのではないかと思い、URL を PowerShell でエンコードするスクリプトを書こうと思い立ちました

 

そもそも URL で使用できる文字は、RFC3986/STD66(Uniform Resource Identifiers (URI): Generic Syntax)で定義されており、アルファベットと数字と一部の記号しか使用できません

日本語とか、RFC3986 で許可されていない文字を表す場合は、同 RFC3986 でパーセントエンコーディングするように定められています
("%"が大量に含まれている時々見る URL)

 

パーセントエンコーディングは、対象の文字列を UTF-8 にして、1バイトずつ16進数の文字列にして % を付ける仕様です

 

例えば「村」をパーセントエンコーディングすると、こんな感じになります

 

村 = 0xE69D91 → E6 9D 91 → %E6%9D%91

 

UrlDecode を使って、デコードされた URL から必要部分を取り出して、多少加工すればパンくずに出来ました

メデタシメデタシ

 

Google Drive のパンくずも取れると完璧なのですが... どうやら無理っぽい orz

 

必要に迫られて実装したコードがあるので、興味があれば参考にしてください

■ 関数名

GetSharePointbreadcrumb

 

■ 動作確認環境

Windows PowerShell 5.1
PowerShell 7.4.5 (Windows)
たぶん Mac Linux でも動くはず

 

■ オプション

GetSharePointbreadcrumb の後に、ハイフンを入力して TAB を叩くと、オプションが補完されるのて、必要オプションを選択してください

GetSharePointbreadcrumb -[TAB]

 

-Debug

NG となって、うまくパンくずが取れない時は、Debug オプションを使うと、デコード済みの URL を表示します
内容をフィードバックしてもらえれば確認します

-VertionCheck

最新版のスクリプトがあるか確認します
最新版があれば、自動ダウンロード & 更新します

 

■ GitHub

以下リポジトリで公開しています

https://github.com/MuraAtVwnet/GetSharePointbreadcrumb
git@github.com:MuraAtVwnet/GetSharePointbreadcrumb.git

■ スクリプトインストール方法

以下を PowerShell プロンプトにコピペ

$ModuleName = "GetSharePointbreadcrumb"
$GitHubName = "MuraAtVwnet"
Invoke-WebRequest -Uri https://raw.githubusercontent.com/$GitHubName/$ModuleName/master/OnlineInstall.ps1 -OutFile ~/OnlineInstall.ps1
& ~/OnlineInstall.ps1

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.