tech.guitarrapc.cóm

Technical updates

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"

取得してみます。

PS> $ip
Address            : 16842762
AddressFamily      : InterNetwork
ScopeId            :
IsIPv6Multicast    : False
IsIPv6LinkLocal    : False
IsIPv6SiteLocal    : False
IsIPv6Teredo       : False
IsIPv4MappedToIPv6 : False
IPAddressToString  : 10.0.1.1

ということは、プロパティを絞れば。

PS> $ip.IPAddressToString
10.0.1.1

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

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

頭に0がついた3桁です。

PS> [System.Net.IPAddress]$ip2 = "192.168.001.001"
PS> $ip2.IPAddressToString
192.168.1.1
PS> [System.Net.IPAddress]$ip3 = "192.168.0001.001"
PS> $ip3.IPAddressToString
192.168.1.1

頭に0がついた4桁だとキャスト失敗します。

PS> [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の両者を組み合わせればいいのでは。 クラス変換されるのはトテモ美味しいわけで。