Powershell从网址列表中提取域名

时间:2015-12-10 19:58:54

标签: powershell

我在文本文件中有一个网址列表

我想把域名拉出来。

运行以下内容:

<div class="content-wrapper" ng-repeat="movieGroup in movieGroups">
      <div class="content" ng-repeat="movie in movieGroup">
        <button ng-click="movieGroup.selectedMovie = movie;">{{ movie.title }}</button>
      </div>
      <content-template movie="movieGroup.selectedMovie"></content-template>
</div>

它会生成此错误:

(Get-Content "c:\temp\test.txt") | ForEach-Object {$url = New-Object System.uri $_;$url.Host} > d:\test.txt

文本文件只是那个域(只是域,而不是域后面的路径)一遍又一遍。

关于我在哪些地方捣乱的想法?

示例文件:

New-Object : Exception calling ".ctor" with "1" argument(s): "Invalid URI: The format of the URI could not be determined."

3 个答案:

答案 0 :(得分:3)

By definition,URI以方案(通常是协议,例如http)开头。因此,.Net URI constructor期望字符串以协议开头。例如,http://www.example.com。如果您传入Invalid URI

,则会收到www.example.com例外

答案 1 :(得分:1)

好的,djs给出了一个答案,说明你为什么做的不起作用,而Buxmaniak就如何通过URI对象和RegEx这两者做出了很好的功能性答案。我只是想发布一个适用于你提供的样本的简化版本......

Get-Content "c:\temp\test.txt" | %{[URI]"http://$_"} | Select -Expand Host | Set-Content D:\Test.txt

这会将http://添加到字符串的开头,并将其转换为URI。然后,它从每个URI对象扩展Host属性,并将其全部保存到您指定的文件中。

答案 2 :(得分:0)

这是基于[System.Uri] ...

的解决方案
@((Get-Content -Path "C:\temp\text.txt") | ForEach-Object { if ($_.Trim()) { (New-Object -TypeName System.Uri ("http://{0}" -f (($_.Trim()) -replace "\\", "/"))).Host } } ) | Sort-Object -Unique

...或者如果你喜欢RegEx,你应该试试这个......

@((Get-Content -Path "C:\temp\text.txt") | ForEach-Object { if ($_ -match "^([\w\.-]*)") { $matches[1] } }) | Sort-Object -Unique

在这两种情况下,结果都是......

lrp.mxptint.net
lrpush.apxlv.com
lsa.measure.ly