PowerShell의 URL에서 도메인 가져오기
이 시나리오에서 PowerShell을 사용하여 도메인을 제거하려고 합니다.가장 효과적인 방법은 무엇입니까?example.com
다음 변수 중에서?
$URL = "http://www.example.com/folder/"
(여기서 PowerShell을 사용하여 $URL을 $DOMAIN으로 변환/스트립하는 일종의 regex 명령)
$DOMAIN = "example.com" #<-- taken from $URL
검색해보니 도메인에서 IP 주소를 찾는 결과가 나왔는데 regex(또는 다른 방법)를 사용하여 먼저 도메인이 무엇인지 확인해야 합니다.
URI 클래스를 사용해 보십시오.
PS> [System.Uri]"http://www.example.com/folder/"
AbsolutePath : /folder/
AbsoluteUri : http://www.example.com/folder/
LocalPath : /folder/
Authority : www.example.com
HostNameType : Dns
IsDefaultPort : True
IsFile : False
IsLoopback : False
PathAndQuery : /folder/
Segments : {/, folder/}
IsUnc : False
Host : www.example.com
Port : 80
Query :
Fragment :
Scheme : http
OriginalString : http://www.example.com/folder/
DnsSafeHost : www.example.com
IsAbsoluteUri : True
UserEscaped : False
UserInfo :
www 접두사를 제거합니다.
PS> ([System.Uri]"http://www.example.com/folder/").Host -replace '^www\.'
example.com
다음과 같이:
PS C:\ps> [uri]$URL = "http://www.example.com/folder/"
PS C:\ps> $domain = $url.Authority -replace '^www\.'
PS C:\ps> $domain
example.com
하위 도메인을 올바르게 계산하려면 두 번째에서 마지막 기간을 알아야 합니다.그런 다음 전체 도메인 길이에서 두 번째 기간(또는 0)의 위치를 빼서 마지막 기간(하나만 해당하는 경우 없음)의 하위 문자열을 최종 위치로 가져옵니다.이렇게 하면 적절한 도메인만 반환되고 TLD 아래에 중첩된 하위 도메인 수에 관계없이 작동합니다.
$domain.substring((($domain.substring(0,$domain.lastindexof("."))).lastindexof(".")+1),$domain.length-(($domain.substring(0,$domain.lastindexof("."))).lastindexof(".")+1))
또한 시스템 URI 자체는 99%의 시간 동안 유효하지만 IIS 로그를 구문 분석하는 중에 매우 긴 URI(대부분 잘못된 요청/악의적인 요청)를 사용하면 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))
}
다음과 같이 정규식을 수행합니다.
[regex]::Match($URL, '(?<=\.).*?(?=[/|$])').value
이렇게 하면 첫 번째 점 이후에 첫 번째 슬래시 또는 문자열 끝까지 모두 표시됩니다.
언급URL : https://stackoverflow.com/questions/14363214/get-domain-from-url-in-powershell
'code' 카테고리의 다른 글
Python에서 목록을 "멋지게" 인쇄하는 방법 (0) | 2023.08.26 |
---|---|
MSDeploy(Visual Studio)에서 App_Data 폴더를 삭제하지 않고 다른 모든 폴더를 삭제하도록 합니다. (0) | 2023.08.26 |
원격 Git 분기를 삭제할 때 "오류: 정규화되지 않은 대상으로 푸시할 수 없습니다" (0) | 2023.08.26 |
Docker-Swarm, Kubernetes, Mesos 및 Core-OS 함대 (0) | 2023.08.21 |
xccconfig 파일에서 전체 URL을 구성하려면 어떻게 합니까? (0) | 2023.08.21 |