Question
[Résolu]Traitement de caractère
- Alan Pinard
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 77
- Remerciements reçus 0
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>
<h1>Vendor/Ethernet/Bluetooth <a href=\"webopedia.internet.com/TERM/M/MAC_address.html\">MAC Address</a> Lookup and Search</h1>
<p>Match your MAC address to its vendor.<br>Match a vendor to the MAC addresses it uses.</p>
<form method=\"GET\" action=\"/mac_find/\">
<strong>MAC Address or Vendor to look for:</strong> <input name=\"string\"> <input type=\"submit\" value=\"string\"></form>
<p class=\"smaller\"><strong>Search by vendor</strong>. For example: \"apple\" or \"allied\"<br>
<strong>Search by MAC Address</strong>. For example: \"00:13:A9\" or \"00-80-C7\" or \"000420\"</p>
<p class=\"smaller\">If you want to lookup MAC address \"08:00:69:02:01:FC\":, <strong>enter first 6 characters</strong> \"08:00:69\", <strong>or full MAC address</strong>
\"08:00:69:02:01:FC\".</p>
<p class=\"smaller\"><em>Database last updated: February 19, 2010</em></p>
<hr>
<h2>Search results for \"00:1D:45:9F:B0:85\"</h2>
<table class=\"table2\">
<thead>
<tr class=\"table2\">
<th scope=\"col\" class=\"table2\">Prefix</th>
<th scope=\"col\" class=\"table2\">Vendor</th>
</tr>
</thead>
<tbody>
<tr class=\"table2\">
<td class=\"table2\">001D45</td>
<td class=\"table2\"><a href=\"www.google.com/search?q=Cisco Systems\">Cisco Systems</a></td>
</tr>
</tbody>
</table>
<hr>
See also:
<ul>
<li><a href=\"/mac_info/\"><strong>How to find/display your MAC Address</strong></a></li>
<li><b>NEW:</b> <a href=\"/mac_find/\" onClick='window.external.AddSearchProvider(\"/mac_find/provider.xml\");'>Add MAC Find Vendor/Ethernet/Bluetooth Search to your Web Browser</a></li>
<li><a href=\"standards.ieee.org/regauth/oui/index.shtml\">OUI and company_id Assignments</a></li>
<li><a href=\"www.iana.org/assignments/ethernet-numbers\">RFC1700 - Ethernet Numbers Section</a></li>
</ul>
<HR>
Send comments to jason @ coffer.com.
<table width=520 border=0 cellpadding=0 cellspacing=0>
<TR>
<TD COLSPAN=3 ALIGN=CENTER>
<br><script type=\"text/javascript\"><!--
google_ad_client = \"pub-5829714042782872\";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = \"468x60_as\";
google_ad_channel =\"\";
google_ad_type = \"text\";
google_color_border = \"000000\";
google_color_bg = \"F0F0F0\";
google_color_link = \"0000FF\";
google_color_url = \"008000\";
google_color_text = \"000000\";//--></script><script type=\"text/javascript\"
src=\"pagead2.googlesyndication.com/pagead/sho...t;></script>
<p align=\"left\">© 1997-2010. All rights reserved.</p></CENTER>
<script src=\"www.google-analytics.com/urchin.js\" type=\"text/javascript\">
</script>
<p align=\"left\"><b>Bookmark this site:</b>
<a href=\"javascript:;;\" onclick=\"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>
<a href=\"javascript:;;\" onclick=\"document.location.href='del.icio.us/post?url='+ location.href + '&title=' + document.title; return false;\">
<img src=\"/images/delicious.png\" alt=\"Bookmark on deli.cio.us\"></a>
<a href=\"javascript:;;\" onclick=\"document.location.href='reddit.com/submit?url=' + location.href + '&title=' + document.title; return false;\">
<img src=\"/images/reddit.gif\" alt=\"Bookmark on reddit\"></a>
<a href=\"javascript:;;\" onclick=\"document.location.href='www.technorati.com/faves/?add=' + location.href; return false;\">
<img src=\"/images/technorati.gif\" alt=\"Bookmark on Technorati\"></a>
<a href=\"javascript:;;\" onclick=\"document.location.href='furl.net/storeIt.jsp?u=' + location.href + '&t=' + document.title; return false;\">
<img src=\"/images/furl.gif\" alt=\"Bookmark on Furl\"></a>
<a href=\"javascript:;;\" onclick=\"document.location.href='www.stumbleupon.com/submit?url=' + location.href + '&title=' + document.title; return false;\">
<img src=\"/images/stumbleupon.gif\" alt=\"Bookmark on stumbleupon\"></a>
<a href=\"javascript:;;\" onclick=\"document.location.href='www.google.com/bookmarks/mark?op=edit&bkmk=' + location.href + '&title=' + document.title; return false;\">
<img src=\"/images/google.png\" alt=\"Bookmark on Google\"></a>
<a href=\"javascript:;;\" onclick=\"document.location.href='http://myweb2.search.ya\hoo.com/myresults/bookmarklet?u=' + location.href + '&t=' + document.title; return false;\">
<img src=\"/images/yahoo.png\" alt=\"Bookmark on Yahoo MyWeb\"></a>
</p>
<script type=\"text/javascript\">
_uacct = \"UA-218338-1\";
urchinTracker();
</script>
<p class=\"smaller\">Page generated in 0.0072 seconds.</p>
.
</BODY>
</HTML>
Ce que j'aimerais récupérer c'est le nom du manufacturier qui ce trouve dans ceci:
<tr class=\"table2\">
<td class=\"table2\">001D45</td>
<td class=\"table2\"><a href=\"www.google.com/search?q=Cisco Systems\">Cisco Systems</a></td>
</tr>
Ici, je voudrais \"Cisco Systems\" 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.
- Arthur
- Hors Ligne
- Membre elite
-
- Messages : 226
- Remerciements reçus 0
ensuite :
[code:1]#On cherche la ligne qui contient le nom du constructeur.
$ligne = $result | select-string -pattern \"google.com/search\"
$constructeur = $ligne.split(\"?q=\"«»)
$constructeur[5]
#ca affiche :
#Cisco Systems\">Cisco Systems</a></td>
$constrcteur_final = $constructeur[5].split(\"\"\">\"«»)
$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.
- Alan Pinard
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 77
- Remerciements reçus 0
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.
- Arthur
- Hors Ligne
- Membre elite
-
- Messages : 226
- Remerciements reçus 0
Bizzare moi ca marche parfaitement avec select-stringJe ne comprend pas pourquoi il ne veut pas extraire seulement la ligne contenant le pattern demandé.
je fait :
[code:1]$result | Select-String -pattern \"google.com/search\"[/code:1]
j'obtient ca :
[code:1]<td class=\"table2\"><a href=\"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.
Mais je verrais ca demain à la limite.
EDIT : Erf j'avais pas vu ton $result est de type \" Net.WebClient\"
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.
- Alan Pinard
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 77
- Remerciements reçus 0
De mon côté, le \"Select-String\" ne fonctionne pas.
Crois-tu que la cause est du au fait que ce que je récupère dans ma variable \"$result\" 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
>$z = \"@
alloallo--
kasdjhak
daslkajld
a;sdkja;
\"@
>$z | Select-String -Pattern \"allo\"
alloallo--
kasdjhak
daslkajld
a;sdkja;
>$x = @(\"alloallo--\",\"kasdjhak\",\"daslkajld\",\"a;sdkja;\")
>$x | Select-String -Pattern \"allo\"
alloallo--
Est-ce qu'il y a un moyen de \"parser\" 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.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
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.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu]Traitement de caractère