サブドメインを適切に計算するための秘訣は、最後から2番目の期間を知る必要があることです。次に、ドメインの全長から2番目のピリオド(または0)の位置を差し引くことにより、最後から2番目のピリオドのサブストリング(または1つしかない場合はnone)を最終位置に移動します。これにより、適切なドメインのみが返され、TLDの下にネストされているサブドメインの数に関係なく機能します。
$ domain.substring((($ domain.substring(0、$ domain.lastindexof( "。")))。lastindexof( "。")+ 1)、$ domain.length-(($ domain.substring(0、 $ domain.lastindexof( "。")))。lastindexof( "。")+ 1))
また、システムURI自体は99%の時間有効ですが、IISログを解析しているところ、非常に長い(多くの場合無効/悪意のある要求)URIでは正しく解析されず、失敗することがわかりました。
私はこれを次のような関数形式で持っています:
Function Get-DomainFromURL {
<#
.SYNOPSIS
Takes string URL and returns domain only
.DESCRIPTION
Takes string URL and returns domain only
.PARAMETER URL
URL to parse for domain
.NOTES
Author: Dane Kantner 9/16/2016
#>
[CmdletBinding()]
param(
[Alias("URI")][parameter(Mandatory=$True,ValueFromPipeline=$True)][string] $URL
)
try { $URL=([System.URI]$URL).host }
catch { write-error "Error parsing URL"}
return $URL.substring((($URL.substring(0,$URL.lastindexof("."))).lastindexof(".")+1),$URL.length-(($URL.substring(0,$URL.lastindexof("."))).lastindexof(".")+1))
}