tech.guitarrapc.cóm

C#, PowerShell, Unity, Cloud, Serverless Technical Update and Features

PowerShellでIPAdressをSystem.Net.IPAddressでキャストする

さて、前回の記事でIP Address (v4)から余計な頭の0などを正規表現で除外しました。 0+をa+とかにすれば、文字列でも使えるわけで、あれはあれで意味があります。 さて、.NET Frameworkには、[System.Net.IPAddress]があります。 これを使えば楽に変換もできますね。

キャストしてみる

いつものMSDN先生で確認します。
MSDN - IPAddress クラス
では、試してみましょう。
[System.Net.IPAddress]$ip = "10.0.1.1"
取得してみます。
$ip
結果です。
Address            : 16842762
AddressFamily      : InterNetwork
ScopeId            : 
IsIPv6Multicast    : False
IsIPv6LinkLocal    : False
IsIPv6SiteLocal    : False
IsIPv6Teredo       : False
IsIPv4MappedToIPv6 : False
IPAddressToString  : 10.0.1.1
ということは、プロパティを絞れば。
$ip.IPAddressToString
とれました。
10.0.1.1

どんなパターンまでキャストできるか

さて、正規表現と同程度に処理できるでしょうか。

頭に0がついた3桁

まずはこれ
[System.Net.IPAddress]$ip2 = "192.168.001.001"
キャストはできましたので取ってみます。
$ip2.IPAddressToString
上手くいきました。
192.168.1.1
次です。
[System.Net.IPAddress]$ip3 = "192.168.0001.001"
キャストはできましたので取ってみます。
$ip3.IPAddressToString
上手くいきました。
192.168.1.1

頭に0がついた4桁

このパターンはどうでしょうか。
[System.Net.IPAddress]$ip4 = "192.0168.0001.001"
キャスト失敗です。
値 "192.0168.0001.001" を型 "System.Net.IPAddress" に変換できません。エラー: "無効な IP アドレスが指定され
ました。"
発生場所 行:27 文字:1
+ [System.Net.IPAddress]$ip4 = "192.0168.0001.001"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMet 
   adataException
    + FullyQualifiedErrorId : RuntimeException

まとめ

状況次第ですが、正規表現と.NETの両者を組み合わせればいいのでは。 クラス変換されるのはトテモ美味しいわけで。 というか、検証の状況になるのはどうかと思いますが、まぁ事例として?