在Powershell中从URL获取域名

时间:2013-01-16 16:36:02

标签: powershell

我希望使用PowerShell在此方案中删除域。从以下变量中获取“domain.com”的最有效方法是什么?

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

(某种regex命令可以使用PowerShell将$ URL转换/剥离到$ DOMAIN)

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

我已经搜索过并且我找到了从域中查找IP地址的结果,但我需要确定域首先使用正则表达式(或其他方法)。任何建议都很棒。

3 个答案:

答案 0 :(得分:45)

尝试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

答案 1 :(得分:2)

像这样:

PS C:\ps> [uri]$URL = "http://www.domain.com/folder/"
PS C:\ps> $domain = $url.Authority -replace '^www\.'
PS C:\ps> $domain
domain.com

答案 2 :(得分:0)

为了正确计算子域,技巧是你需要知道倒数第二个周期。然后通过从域的总长度中减去第二个周期(或0)的位置,将该秒的子串到最后一个周期(如果只有一个,则为无。)到最终位置。这将返回适当的域名,并且无论在TLD下嵌套了多少个子域,它都将起作用:

$ domain.substring((($ domain.substring(0,$ domain.lastindexof(&#34;&#34;)))lastindexof(&#34;&#34)+ 1) ,$ domain.length - (($ domain.substring(0,$ domain.lastindexof(&#34;。&#34;)))lastindexof(&#34;&#34)+ 1))< / p>

另请注意,系统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))
}