String 使用powershell在网页中查找特定句子

String 使用powershell在网页中查找特定句子,string,powershell,String,Powershell,我需要使用powershell通过whois解析IP地址。我的公司过滤端口43和WHOIS查询,因此我必须在这里使用的解决方法是要求powershell使用网站,例如,读取http流并查找与IP地址匹配的组织名称 到目前为止,我已经成功地将网页读入powershell(这里的例子是在yahoo.com上有一个WHOIS),这是 下面是我的片段: $url=Invoke-WebRequest https://who.is/whois-ip/ip-address/206.190.36.45 现在如

我需要使用powershell通过whois解析IP地址。我的公司过滤端口43和WHOIS查询,因此我必须在这里使用的解决方法是要求powershell使用网站,例如,读取http流并查找与IP地址匹配的组织名称

到目前为止,我已经成功地将网页读入powershell(这里的例子是在yahoo.com上有一个WHOIS),这是

下面是我的片段:

$url=Invoke-WebRequest https://who.is/whois-ip/ip-address/206.190.36.45
现在如果我这样做:

$url.gettype()
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    HtmlWebResponseObject                    Microsoft.PowerShell.Commands.WebResponseObject
我看到这个对象有几个属性:

Name              MemberType Definition
----              ---------- ----------
Equals            Method     bool Equals(System.Object obj)
GetHashCode       Method     int GetHashCode()
GetType           Method     type GetType()
ToString          Method     string ToString()
AllElements       Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection AllElements {get;}
BaseResponse      Property   System.Net.WebResponse BaseResponse {get;set;}
Content           Property   string Content {get;}
Forms             Property   Microsoft.PowerShell.Commands.FormObjectCollection Forms {get;}
Headers           Property   System.Collections.Generic.Dictionary[string,string] Headers {get;}
Images            Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection Images {get;}
InputFields       Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection InputFields {get;}
Links             Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection Links {get;}
ParsedHtml        Property   mshtml.IHTMLDocument2 ParsedHtml {get;}
RawContent        Property   string RawContent {get;}
RawContentLength  Property   long RawContentLength {get;}
RawContentStream  Property   System.IO.MemoryStream RawContentStream {get;}
Scripts           Property   Microsoft.PowerShell.Commands.WebCmdletElementCollection Scripts {get;}
StatusCode        Property   int StatusCode {get;}
StatusDescription Property   string StatusDescription {get;}
但每次我尝试像这样的命令

$url.ToString() | select-string "OrgName"
Powershell返回整个HTML代码,因为它将文本字符串作为一个整体进行解释。我找到了一种解决方法,将输出转储到文件中,然后通过一个对象读取文件(因此每一行都是数组的一个元素),但我要检查数百个IP,因此始终创建一个文件不是很理想

我想知道我如何阅读网页的内容并得到这样一句话: 组织名称:雅虎!广播服务公司

只有那一行


非常感谢您的帮助!:)

很可能有更好的方法来分析这个问题,但您使用当前的逻辑是正确的

$web=调用WebRequesthttps://who.is/whois-ip/ip-address/206.190.36.45
$web.tostring()-split“[`r`n]”选择字符串“OrgName”
Select String
返回匹配,因为它以前是一个长字符串。使用
-split
我们可以将其拆分为您期望的回报

OrgName:Yahoo!广播服务公司。
在这之后进行一些字符串操作将得到更清晰的答案。同样,也有很多方法可以做到这一点

($web.tostring()-split“[`r`n]”选择字符串“OrgName”|选择-First 1)-split:“[1].Trim()
我使用了
Select-First 1
,因为
Select string
可以返回多个对象。这将确保我们在操作字符串时使用1。字符串在冒号上拆分并修剪,以删除留下的空格

由于您正在提取HTML数据,我们还可以遍历这些属性以获得更具体的结果。这样做的目的是为了得到一个回答

$web=调用WebRequesthttps://who.is/whois-ip/ip-address/206.190.36.45
$data=$web.Allegements |其中{$\标记名-eq“Pre”}选择对象-展开InnerText
$whois=($data-split“`r`n`r`n”| select-index 1)-replace:\s“,“=”|从StringData转换
$whois.OrgName
在本例中,所有这些数据都存储在
PRE
标记的文本中。我所做的是将数据分割成部分(部分是用分隔它们的空行定义的。我寻找连续的换行符)。第二组数据包含组织名称。将其存储在变量中,并将
OrgName
作为属性:
$whois.OrgName
。下面是
$whois
的样子

名称值
----                           -----                                                                                                                         
更新日期2013-04-02
桑尼维尔市
地址:第一大道701号
雅虎!广播服务公司。
加州州立大学
美国国家
裁判http://whois.arin.net/rest/org/YAHO                                                                                           
邮政编码94089
注册日期1999-11-17
奥吉德雅豪
如果您愿意处理这些内容,还可以将该哈希表设置为自定义对象

[pscustomobject]$whois
更新日期:2017-01-28
城市:桑尼维尔
地址:第一大道701号
组织名称:雅虎!广播服务公司。
州:加利福尼亚州
国家:美国
裁判:https://whois.arin.net/rest/org/YAHO
邮政编码:94089
注册日期:1999-11-17
机构:YAHO
这是一款非常简单的应用程序,适用于microsoft将应用程序放入System32或windir中,并在powershell中使用whois命令,然后获取字符串获取“orgname”,如下所示

PS C:\> whois.exe -v 206.190.36.45 | Select-String "Registrant Organization"

Registrant Organization: Yahoo! Inc.

我建议您使用此应用程序,因为它提供了有关您工作的更多信息

在这里,执行此操作的方法实际上是执行
调用WebRequest
。如果我们查看一下从Invoke WebRequest获得的对象的一些属性,就会发现PowerShell已经为我们解析了一些HTML和文本

我们所要做的就是挑选出一些我们愿意使用的价值观。例如,浏览一下
ParsedText
字段,我们可以看到这些结果

这些字段大约从第30行开始。在我解决这个问题的方法中,我们知道我们会找到好的数据