Trouver des phrase dans une page web à l'aide de powershell
J'ai besoin d'utiliser powershell pour résoudre les adresses IP via le whois. Mon entreprise filtres port 43 et requêtes WHOIS de sorte que la solution de contournement que j'ai à utiliser ici est de demander powershell pour l'utilisation d'un site comme https://who.is, lire les flux http et recherchez le Nom de l'Organisation correspondant à l'adresse IP.
Jusqu'à présent j'ai réussi à obtenir la page web lire en powershell (exemple ici avec un WHOIS sur yahoo.com) qui est https://who.is/whois-ip/ip-address/206.190.36.45
Donc voici mon extrait de:
$url=Invoke-WebRequest https://who.is/whois-ip/ip-address/206.190.36.45
maintenant, si je fais :
$url.gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False HtmlWebResponseObject Microsoft.PowerShell.Commands.WebResponseObject
Je vois cet objet possède plusieurs propriétés:
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;}
mais chaque fois que j'essaie des commandes comme
$url.ToString() | select-string "OrgName"
Powershell renvoie l'ensemble du code HTML car il interprète la chaîne de texte dans son ensemble. J'ai trouvé une solution de contournement de dumping de la sortie dans un fichier, et ensuite lire le fichier par l'intermédiaire d'un objet (de sorte que chaque ligne est un élément d'un tableau), mais j'ai des centaines d'adresses ip pour vérifier si ce n'est pas très optimal pour créer un fichier de tous les temps.
Je voudrais savoir comment je pourrais lire le contenu de la page web https://who.is/whois-ip/ip-address/206.190.36.45 et obtenir la ligne qui dit :
OrgName: Yahoo! Services De Diffusion, Inc.
et juste cette ligne uniquement.
Merci beaucoup pour votre aide! 🙂
- Je ne pouvais pas le modifier à ma propre question, donc je suis ajoutant un commentaire ici, mais évidemment, $url,$web,$a sont en fait une seule et même variable.J'ai oublié de modifier mon projet correctement, désolé pour la confusion.
- Changé les variables pour être le premier nom que vous avez utilisé.
Vous devez vous connecter pour publier un commentaire.
Il y a probablement de meilleures façons d'analyser ce mais vous étiez sur la bonne voie avec vous logique actuelle.
Select-String
était de retour de la partie, comme elle, auparavant, était d'une longue chaîne. À l'aide de-split
on peut se briser à tout juste d'obtenir le rendement attendu.Certains de manipulation de chaîne après qui vous permettra d'obtenir un nettoyeur de réponse. Encore une fois, de nombreux façons de procéder ainsi
J'ai utilisé
Select -First 1
commeselect-string
pourrait retourner plus d'un objet. Il serait juste de nous assurer que nous travaillons avec 1 lorsque l'on manipule la chaîne. La chaîne est divisée sur deux points et parés pour enlever les espaces laissés-pour-compte.Depuis que vous êtes en tirant des données HTML, nous pourrions également vous promener à travers ces propriétés afin d'obtenir des résultats plus précis. L'intention était d'obtenir 1RedOne réponse
Toutes les données sont stockées dans le texte de la
PRE
balise dans cet exemple. Ce que j'ai à faire est de séparer les données dans ses sections (Sections sont définies avec des lignes blanches en les séparant. Je recherche consécutive, les retours à la ligne). Le deuxième groupe de données contient le nom d'organisation. La stocker dans une variable et tirez leOrgName
comme une propriété:$whois.OrgName
. Voici ce que$whois
ressembleVous pouvez également faire cette table de hachage dans un objet personnalisé si vous préférez traiter avec ceux-ci.
il, il est très simple à utiliser whois cette application est pour microsoft de mettre app dans System32 ou windir et en powershell utiliser whois commande get-chaîne get "orgname" comme ce
Je vous conseille cette appli car a plus d'informations pour votre travail
Ici, vous allez, la façon de le faire est en effet de faire un
Invoke-WebRequest
. Si nous prenons un coup d'oeil à certaines des propriétés de l'objet que nous obtenons de Invoke-WebRequest, nous pouvons voir que PowerShell a déjà analysé certains de l'HTML et du texte pour nous.Tout ce que nous avons à faire est de choisir une des valeurs qui nous aimerions travailler avec. Par exemple, en prenant un coup d'oeil à la
ParsedText
le terrain, nous voyons ces résultats.Ces champs de commencer sur la ligne 30. Dans mon approche pour résoudre ce problème, nous savons que nous allons trouver de bonnes données de cette mi-chemin en bas de la page, donc si on peut gratter les valeurs de ces lignes, nous serons sur notre façon de travailler avec les données. Le code pour accomplir cette première partie est ceci:
Maintenant, PowerShell a un certain nombre de très puissantes commandes d'importer et de convertir les données dans différents formats. Par exemple, si nous pouvions remplacer le ':' caractère deux-points avec un signe'='=', nous pourrions envoyer la pagaille sur
ConverFrom-StringData
et sont riches en PowerShell objets de travailler avec. Il s'avère que nous pouvons facilement le faire en utilisant l'universel-Replace
de l'opérateur, à l'instar de ceJ'ai pensé que vous pourriez vouloir faire cela dans l'avenir, j'ai donc pris la chose entière et en a fait un simple cinq la fonction ligne pour vous. Jetez cela dans votre $Profil et d'en profiter.
De sorte que le résultat final ressemble à ceci:
et en utilisant cela fonctionne de cette façon:
Vous pouvez ensuite sélectionner l'une des propriétés que vous souhaitez à l'aide de la sélection normale d'Objet ou where-Object commandes. Par exemple, pour tirer la orgName de la propriété, vous pouvez utiliser cette commande:
ConvertFrom-StringData
comme il y a des doubles de clés dans ce texteref
. Je voulais le faire aussi, mais pensé qu'il était par-dessus bord.