很可能有更好的方法来解析这个,但你当前的逻辑是在正确的轨道上。
$web = Invoke-WebRequest https://who.is/whois-ip/ip-address/206.190.36.45
$web.tostring() -split "[`r`n]" | select-string "OrgName"
Select-String
返回匹配项,因为它以前是一长串。使用-split
我们可以将其分解以获得您期望的回报。
OrgName: Yahoo! Broadcast Services, Inc.
之后进行一些字符串操作将得到更清晰的答案。再次,many也有解决这个问题的方法
(($web.tostring() -split "[`r`n]" | select-string "OrgName" | Select -First 1) -split ":")[1].Trim()
I used Select -First 1
as select-string
可以返回多个对象。它只会确保我们在操作字符串时使用的是 1。该字符串只是在冒号上分割并修剪以删除留下的空格。
由于您正在提取 HTML 数据,我们还可以遍历这些属性以获得更具体的结果。这样做的目的是为了得到 1RedOne 的答案
$web = Invoke-WebRequest https://who.is/whois-ip/ip-address/206.190.36.45
$data = $web.AllElements | Where{$_.TagName -eq "Pre"} | Select-Object -Expand InnerText
$whois = ($data -split "`r`n`r`n" | select -index 1) -replace ":\s","=" | ConvertFrom-StringData
$whois.OrgName
所有这些数据都存储在文本中PRE
本例中的标签。我所做的是将数据分成几个部分(部分是用空行分隔的定义的。我寻找连续的换行符)。第二组数据包含组织名称。将其存储在变量中并拉取OrgName
作为财产:$whois.OrgName
。这是什么$whois
好像
Name Value
---- -----
Updated 2013-04-02
City Sunnyvale
Address 701 First Ave
OrgName Yahoo! Broadcast Services, Inc.
StateProv CA
Country US
Ref http://whois.arin.net/rest/org/YAHO
PostalCode 94089
RegDate 1999-11-17
OrgId YAHO
如果您喜欢处理这些哈希表,您还可以将该哈希表变成自定义对象。
[pscustomobject]$whois
Updated : 2017-01-28
City : Sunnyvale
Address : 701 First Ave
OrgName : Yahoo! Broadcast Services, Inc.
StateProv : CA
Country : US
Ref : https://whois.arin.net/rest/org/YAHO
PostalCode : 94089
RegDate : 1999-11-17
OrgId : YAHO