我希望使用PowerShell在此方案中删除域。从以下变量中获取“domain.com”的最有效方法是什么?
$URL = "http://www.domain.com/folder/"
(某种regex命令可以使用PowerShell将$ URL转换/剥离到$ DOMAIN)
$DOMAIN = "domain.com" #<-- taken from $URL
我已经搜索过并且我找到了从域中查找IP地址的结果,但我需要确定域首先使用正则表达式(或其他方法)。任何建议都很棒。
答案 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))
}