Получить домен с URL в Powershell - программирование
Подтвердить что ты не робот

Получить домен с URL в Powershell

Я хочу отключить домен в этом сценарии с помощью PowerShell. Каков наиболее эффективный способ получить "domain.com" из следующей переменной?

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

(некоторая команда regex здесь, чтобы конвертировать/вырезать $URL в $DOMAIN с помощью PowerShell)

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

Я искал и нашел результаты поиска IP-адреса из домена, но мне нужно установить, что домен сначала использует регулярное выражение (или другой метод). Любые предложения велики.

4b9b3361

Ответ 1

Попробуйте класс 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

Ответ 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

Ответ 3

Для правильного вычисления поддомена вам нужно знать второй и последний периоды. Затем вы берете подстроку этой секунды до последнего периода (или нет, если она только одна.) До конечной позиции, вычитая местоположение второго периода (или 0) из общей длины домена. Это вернет правильный домен и будет работать независимо от того, сколько поддоменов вложено в 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))
}

Ответ 4

@danekan, я пытаюсь использовать вашу функцию для автоматизации чего-либо на cisco WSA. Как мы имеем дело с TLD, как co.nz или com.au?