Question [Résolu]Traitement de caractère

Plus d'informations
il y a 15 ans 9 mois #7053 par Alan Pinard
Bonjour,

Je suis en train de construire une fonction qui récupère le manufacturier pour un MAC adresse.

Voici mon code:

Function Get-MAcVendor {

PARAM (
$Mac = (Read-Host \"Enter the Mac address with `\"-`\" or `\":`\" separator\")
)
If($Mac.Contains(\"-\")){
$MACRequest = ($MAC.Replace(\"-\",\"%3A\"))
} Else{
$MACRequest = ($MAC.Replace(\":\",\"%3A\"))
}

$MACRequest = $MACRequest.Insert(0,\"?string=\")
$URL = \"www.coffer.com/mac_find/\"; + $MACRequest
$Result = (New-Object Net.WebClient).DownloadString($URL)
Return $Result

}


La fonction est simple:

1. Je récupère la MAC Adresse
2. Je remplace les caractère \":\" ou \"-\" par %3A afin de pouvoir respecter le format pour le site web sur lequel je vais chercher mes information.
3. Je récupère les informations dans une variable.

Jusque-là tout va bien par contre, dans ma variable $Result je récupère tout le codage de la page web ce qui me donne un résultat semblable à ceci:

<!DOCTYPE html
PUBLIC \"-//W3C//DTD HTML 4.01//EN\"
\"www.w3.org/TR/html4/strict.dtd\">;
<html lang=\"en-US\">
<head profile=\"www.w3.org/2005/10/profile\">;
<style type=\"text/css\">
<!--
@import url(\"main.css\");
-->
</style>
<link rel=\"icon\" type=\"image/vnd.microsoft.icon\" href=\"favicon.ico\">
<link rel=\"shortcut icon\" type=\"image/ico\" href=\"favicon.ico\">
<link rel=\"search\" href=\"provider.xml\"
type=\"application/opensearchdescription+xml\"
title=\"MAC Find\" />
<title>MAC_Find: Search results for \"00:1D:45:9F:B0:85\" (Vendor/Ethernet/Bluetooth MAC Address Lookup and Search)</title></head>

<body>
&lt;h1&gt;Vendor/Ethernet/Bluetooth &lt;a href=\&quot;webopedia.internet.com/TERM/M/MAC_address.html\">MAC Address</a> Lookup and Search</h1>
&lt;p&gt;Match your MAC address to its vendor.&lt;br&gt;Match a vendor to the MAC addresses it uses.&lt;/p&gt;

&lt;form method=\&quot;GET\&quot; action=\&quot;/mac_find/\&quot;&gt;
&lt;strong&gt;MAC Address or Vendor to look for:&lt;/strong&gt; &lt;input name=\&quot;string\&quot;&gt; &lt;input type=\&quot;submit\&quot; value=\&quot;string\&quot;&gt;&lt;/form&gt;

&lt;p class=\&quot;smaller\&quot;&gt;&lt;strong&gt;Search by vendor&lt;/strong&gt;. For example: \&quot;apple\&quot; or \&quot;allied\&quot;&lt;br&gt;
&lt;strong&gt;Search by MAC Address&lt;/strong&gt;. For example: \&quot;00:13:A9\&quot; or \&quot;00-80-C7\&quot; or \&quot;000420\&quot;&lt;/p&gt;

&lt;p class=\&quot;smaller\&quot;&gt;If you want to lookup MAC address \&quot;08:00:69:02:01:FC\&quot;:, &lt;strong&gt;enter first 6 characters&lt;/strong&gt; \&quot;08:00:69\&quot;, &lt;strong&gt;or full MAC address&lt;/strong&gt;
\&quot;08:00:69:02:01:FC\&quot;.&lt;/p&gt;
&lt;p class=\&quot;smaller\&quot;&gt;&lt;em&gt;Database last updated: February 19, 2010&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;

&lt;h2&gt;Search results for \&quot;00:1D:45:9F:B0:85\&quot;&lt;/h2&gt;
&lt;table class=\&quot;table2\&quot;&gt;
&lt;thead&gt;
&lt;tr class=\&quot;table2\&quot;&gt;
&lt;th scope=\&quot;col\&quot; class=\&quot;table2\&quot;&gt;Prefix&lt;/th&gt;
&lt;th scope=\&quot;col\&quot; class=\&quot;table2\&quot;&gt;Vendor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class=\&quot;table2\&quot;&gt;
&lt;td class=\&quot;table2\&quot;&gt;001D45&lt;/td&gt;
&lt;td class=\&quot;table2\&quot;&gt;&lt;a href=\&quot;www.google.com/search?q=Cisco Systems\">Cisco Systems</a></td>
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
See also:
&lt;ul&gt;
&lt;li&gt;&lt;a href=\&quot;/mac_info/\&quot;&gt;&lt;strong&gt;How to find/display your MAC Address&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NEW:&lt;/b&gt; &lt;a href=\&quot;/mac_find/\&quot; onClick='window.external.AddSearchProvider(\&quot;/mac_find/provider.xml\&quot;);'&gt;Add MAC Find Vendor/Ethernet/Bluetooth Search to your Web Browser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=\&quot;standards.ieee.org/regauth/oui/index.shtml\">OUI and company_id Assignments</a></li>
&lt;li&gt;&lt;a href=\&quot;www.iana.org/assignments/ethernet-numbers\">RFC1700 - Ethernet Numbers Section</a></li>
&lt;/ul&gt;
&lt;HR&gt;
Send comments to jason @ coffer.com.
&lt;table width=520 border=0 cellpadding=0 cellspacing=0&gt;
&lt;TR&gt;
&lt;TD COLSPAN=3 ALIGN=CENTER&gt;
 &lt;br&gt;&lt;script type=\&quot;text/javascript\&quot;&gt;&lt;!--
google_ad_client = \&quot;pub-5829714042782872\&quot;;
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = \&quot;468x60_as\&quot;;
google_ad_channel =\&quot;\&quot;;
google_ad_type = \&quot;text\&quot;;
google_color_border = \&quot;000000\&quot;;
google_color_bg = \&quot;F0F0F0\&quot;;
google_color_link = \&quot;0000FF\&quot;;
google_color_url = \&quot;008000\&quot;;
google_color_text = \&quot;000000\&quot;;//--&gt;&lt;/script&gt;&lt;script type=\&quot;text/javascript\&quot;
src=\&quot;pagead2.googlesyndication.com/pagead/sho...t;></script>;
&lt;p align=\&quot;left\&quot;&gt;© 1997-2010. All rights reserved.&lt;/p&gt;&lt;/CENTER&gt;
&lt;script src=\&quot;www.google-analytics.com/urchin.js\"; type=\"text/javascript\">
&lt;/script&gt;

&lt;p align=\&quot;left\&quot;&gt;&lt;b&gt;Bookmark this site:&lt;/b&gt;
&lt;a href=\&quot;javascript:;;\&quot; onclick=\&quot;document.location.href='digg.com/submit?phase=2&url='+ location.href + '&title=' + document.title; return false;\"><img src=\"/images/digg.png\" alt=\"Bookmark on digg\"></a>
 
&lt;a href=\&quot;javascript:;;\&quot; onclick=\&quot;document.location.href='del.icio.us/post?url='+ location.href + '&title=' + document.title; return false;\">
&lt;img src=\&quot;/images/delicious.png\&quot; alt=\&quot;Bookmark on deli.cio.us\&quot;&gt;&lt;/a&gt;
 
&lt;a href=\&quot;javascript:;;\&quot; onclick=\&quot;document.location.href='reddit.com/submit?url=' + location.href + '&title=' + document.title; return false;\">
&lt;img src=\&quot;/images/reddit.gif\&quot; alt=\&quot;Bookmark on reddit\&quot;&gt;&lt;/a&gt;
 
&lt;a href=\&quot;javascript:;;\&quot; onclick=\&quot;document.location.href='www.technorati.com/faves/?add=' + location.href; return false;\">
&lt;img src=\&quot;/images/technorati.gif\&quot; alt=\&quot;Bookmark on Technorati\&quot;&gt;&lt;/a&gt;
 
&lt;a href=\&quot;javascript:;;\&quot; onclick=\&quot;document.location.href='furl.net/storeIt.jsp?u=' + location.href + '&t=' + document.title; return false;\">
&lt;img src=\&quot;/images/furl.gif\&quot; alt=\&quot;Bookmark on Furl\&quot;&gt;&lt;/a&gt;
 
&lt;a href=\&quot;javascript:;;\&quot; onclick=\&quot;document.location.href='www.stumbleupon.com/submit?url=' + location.href + '&title=' + document.title; return false;\">
&lt;img src=\&quot;/images/stumbleupon.gif\&quot; alt=\&quot;Bookmark on stumbleupon\&quot;&gt;&lt;/a&gt;
 
&lt;a href=\&quot;javascript:;;\&quot; onclick=\&quot;document.location.href='www.google.com/bookmarks/mark?op=edit&bkmk=' + location.href + '&title=' + document.title; return false;\">
&lt;img src=\&quot;/images/google.png\&quot; alt=\&quot;Bookmark on Google\&quot;&gt;&lt;/a&gt;
 
&lt;a href=\&quot;javascript:;;\&quot; onclick=\&quot;document.location.href='http://myweb2.search.ya\hoo.com/myresults/bookmarklet?u=' + location.href + '&t=' + document.title; return false;\">
&lt;img src=\&quot;/images/yahoo.png\&quot; alt=\&quot;Bookmark on Yahoo MyWeb\&quot;&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;script type=\&quot;text/javascript\&quot;&gt;
_uacct = \&quot;UA-218338-1\&quot;;
urchinTracker();
&lt;/script&gt;
&lt;p class=\&quot;smaller\&quot;&gt;Page generated in 0.0072 seconds.&lt;/p&gt;

.
&lt;/BODY&gt;
&lt;/HTML&gt;


Ce que j'aimerais récupérer c'est le nom du manufacturier qui ce trouve dans ceci:

&lt;tr class=\&quot;table2\&quot;&gt;
&lt;td class=\&quot;table2\&quot;&gt;001D45&lt;/td&gt;
&lt;td class=\&quot;table2\&quot;&gt;&lt;a href=\&quot;www.google.com/search?q=Cisco Systems\">Cisco Systems</a></td>
&lt;/tr&gt;


Ici, je voudrais \&quot;Cisco Systems\&quot; seulement.

Est-ce que vous auriez quelques idée?

Merci,<br><br>Message édité par: Versiona, à: 9/06/10 22:41

Alan Pinard
Version A

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #7056 par Arthur
Il faut trouver un \&quot;point d'accroche\&quot; comme par exemple google.com/search, c'est à dire qu'a chaque fois qu'on lance une recherche il faut une ligne avec \&quot;google.com/search + le nom du constructeur\&quot;.

ensuite :

[code:1]#On cherche la ligne qui contient le nom du constructeur.
$ligne = $result | select-string -pattern \&quot;google.com/search\&quot;
$constructeur = $ligne.split(\&quot;?q=\&quot;«»)
$constructeur[5]
#ca affiche :
#Cisco Systems\&quot;&gt;Cisco Systems&lt;/a&gt;&lt;/td&gt;
$constrcteur_final = $constructeur[5].split(\&quot;\&quot;\&quot;&gt;\&quot;«»)
$constrcteur_final[0]
#ca affiche :
#Cisco Systems
#[/code:1]

je n'ai pas le temps de bien réfléchir au sujet mais je pense qu'il y a un moyen bien plus facile.<br><br>Message édité par: bilbao, à: 3/06/10 22:04

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #7058 par Alan Pinard
Merc de ta réponse Bilbao,

Je comprend ce que tu veux faire, par ailleurs, lorsque j'essaie il me remplie ma variable $ligne avec tout le contenue de la variable $result.

Je ne comprend pas pourquoi il ne veut pas extraire seulement la ligne contenant le pattern demandé.

Aurais-tu une idée de la raison?

et lorsque tu écrit:

Bilbao dit:

je n'ai pas le temps de bien réfléchir au sujet mais je pense qu'il y a un moyen bien plus facile.


Est-ce que tu penses à un moyen de récupérer le manufacturier de la MAC ou tu penses à un moyen de traiter les chaines de caractères?

Merci,

Alan Pinard
Version A

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #7059 par Arthur

Je ne comprend pas pourquoi il ne veut pas extraire seulement la ligne contenant le pattern demandé.

Bizzare moi ca marche parfaitement avec select-string :unsure:

je fait :

[code:1]$result | Select-String -pattern \&quot;google.com/search\&quot;[/code:1]

j'obtient ca :

[code:1]&lt;td class=\&quot;table2\&quot;&gt;&lt;a href=\&quot;www.google.com/search?q=Cisco Systems\">Cisco Systems</a></td>[/code:1]

Est-ce que tu penses à un moyen de récupérer le manufacturier de la MAC ou tu penses à un moyen de traiter les chaines de caractères?


Je parle des 2. :laugh:
Mais je verrais ca demain à la limite.

EDIT : Erf j'avais pas vu ton $result est de type \&quot; Net.WebClient\&quot;

test :
[code:1][string]$result2 = $result[/code:1]
et ensuite tu fait select string sur result2

Message édité par: bilbao, à: 3/06/10 22:57<br><br>Message édité par: bilbao, à: 3/06/10 23:00

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #7060 par Alan Pinard
Rebonjour,

De mon côté, le \&quot;Select-String\&quot; ne fonctionne pas.

Crois-tu que la cause est du au fait que ce que je récupère dans ma variable \&quot;$result\&quot; est considéré comme 1 seule ligne et non un array.

J'ai fait le test de mon côté et voici les résultat

&gt;$z = \&quot;@
alloallo--
kasdjhak
daslkajld
a;sdkja;
\&quot;@

&gt;$z | Select-String -Pattern \&quot;allo\&quot;

alloallo--
kasdjhak
daslkajld
a;sdkja;

&gt;$x = @(\&quot;alloallo--\&quot;,\&quot;kasdjhak\&quot;,\&quot;daslkajld\&quot;,\&quot;a;sdkja;\&quot;)

&gt;$x | Select-String -Pattern \&quot;allo\&quot;

alloallo--


Est-ce qu'il y a un moyen de \&quot;parser\&quot; une longue chaîne de caractères et sortir que ce que l'on a besoin?

Merci,

Alan Pinard
Version A

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #7063 par Arnaud Petitjean
Salut,

S'il y a plusieurs résultats trouvés par la commande Select-String, alors un tableau de résultat est retourné. Ce qui n'est pas le cas lorsqu'il n'y a qu'un seul résultat.
Ceci mécanisme est le même pour toutes les autres commandes PowerShell.

Je pense que le plus simple est de traiter $result en tant que chaine de caractères.
Ensuite, je te conseille de regarder le fonctionnement des expressions régulières et notamment la capture. Par ce biais, tu devrais arriver relativement facilement à faire ce que tu souhaites. C'est à mon avis la meilleure méthode pour résoudre ton problème.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.054 secondes
Propulsé par Kunena