29

このシナリオでは、PowerShellを使用してドメインを削除したいと考えています。次の変数から「domain.com」を取得するための最も効果的な方法は何ですか?

$URL = "http://www.domain.com/folder/"

(PowerShellを使用して$URLを$DOMAINに変換/削除するためのある種の正規表現コマンド)

$DOMAIN = "domain.com" #<-- taken from $URL

検索して、ドメインからIPアドレスを見つける結果を見つけましたが、正規表現(または別の方法)を使用して、ドメインが最初に何であるかを確認する必要があります。どんな提案も素晴らしいです。

4

3 に答える 3

71

Uriクラスを試してください:

PS> [System.Uri]"http://www.domain.com/folder/"


AbsolutePath   : /folder/
AbsoluteUri    : http://www.domain.com/folder/
LocalPath      : /folder/
Authority      : www.domain.com
HostNameType   : Dns
IsDefaultPort  : True
IsFile         : False
IsLoopback     : False
PathAndQuery   : /folder/
Segments       : {/, folder/}
IsUnc          : False
Host           : www.domain.com
Port           : 80
Query          :
Fragment       :
Scheme         : http
OriginalString : http://www.domain.com/folder/
DnsSafeHost    : www.domain.com
IsAbsoluteUri  : True
UserEscaped    : False
UserInfo       :

そして、wwwプレフィックスを削除します。

PS> ([System.Uri]"http://www.domain.com/folder/").Host -replace '^www\.'
domain.com
于 2013-01-16T16:47:22.113 に答える
3

このような:

PS C:\ps> [uri]$URL = "http://www.domain.com/folder/"
PS C:\ps> $domain = $url.Authority -replace '^www\.'
PS C:\ps> $domain
domain.com
于 2013-01-16T16:49:04.860 に答える
1

サブドメインを適切に計算するための秘訣は、最後から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))
}
于 2016-09-16T20:38:12.857 に答える