Question
Synchronisation de 2 DNS - Résolu
- PASCAULT
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 17 ans 5 mois #2863
par PASCAULT
Réponse de PASCAULT sur le sujet Re:Synchronisation de 2 DNS
Bonjour Camille,
L'idéal aurait été que tu puisses nous mettre le résultat réél de tes fichiers obtenu par dnscmd et nslookup, ou encore la cmd effectuée avec ces outils. C'est toujours un peu plus délicat de traiter du texte.
Le problème en plus avec le résultat de ces commandes, c'est que parfois, les espaces sont remplacés par des caractères spéciaux. ( ex les espaces obtenus entre les champs avec dnscmd sont parfois code ascii 0x09 parfois 0x20(space) )
Tu peux alors supprimer ces espaces avec ltrim par ex en utilisant comme caractère [char]0x09
En passant par un fichier csv, pourquoi pas, mais la problèmatique reste la même, il faut que tu spécifies le caractère de séparation.
Le plus simple, peut-être serait peut-être d'utiliser les expressions régulières.
en imaginant une ligne du style
[code:1]$ligne=\" domaine.ext. A 10.100.100.100\"
$dnstest -cmatch '(\w+.\w*.*)\s+(A)\s+(\d+.\d+.\d+.\d+)'
#Résultat du match
$matches
#Extraction du résultat
$ip=$matches[3]
$type=$matches[2]
$Nom=$matches[1]
[/code:1]
Cette expression régulière devrait \"matcher\" seulement les lignes dns contenant un type d'hôte A et récupérer un nom dns de type nomdom.dom. ou dom.
Il faudra peut-être adapter la partie
La synchro de tes dns ne doit se faire que dans un sens, c'est ça ? Tu veux récupérer les nouveaux hôtes de ton dns externes vers ton interne seulement ?
L'idéal aurait été que tu puisses nous mettre le résultat réél de tes fichiers obtenu par dnscmd et nslookup, ou encore la cmd effectuée avec ces outils. C'est toujours un peu plus délicat de traiter du texte.
Le problème en plus avec le résultat de ces commandes, c'est que parfois, les espaces sont remplacés par des caractères spéciaux. ( ex les espaces obtenus entre les champs avec dnscmd sont parfois code ascii 0x09 parfois 0x20(space) )
Tu peux alors supprimer ces espaces avec ltrim par ex en utilisant comme caractère [char]0x09
En passant par un fichier csv, pourquoi pas, mais la problèmatique reste la même, il faut que tu spécifies le caractère de séparation.
Le plus simple, peut-être serait peut-être d'utiliser les expressions régulières.
en imaginant une ligne du style
[code:1]$ligne=\" domaine.ext. A 10.100.100.100\"
$dnstest -cmatch '(\w+.\w*.*)\s+(A)\s+(\d+.\d+.\d+.\d+)'
#Résultat du match
$matches
#Extraction du résultat
$ip=$matches[3]
$type=$matches[2]
$Nom=$matches[1]
[/code:1]
Cette expression régulière devrait \"matcher\" seulement les lignes dns contenant un type d'hôte A et récupérer un nom dns de type nomdom.dom. ou dom.
Il faudra peut-être adapter la partie
(\w+.\w*.*)
La synchro de tes dns ne doit se faire que dans un sens, c'est ça ? Tu veux récupérer les nouveaux hôtes de ton dns externes vers ton interne seulement ?
Connexion ou Créer un compte pour participer à la conversation.
- PASCAULT
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 17 ans 5 mois #2864
par PASCAULT
Réponse de PASCAULT sur le sujet Re:Synchronisation de 2 DNS
Bonjour Camille,
L'idéal aurait été que tu puisses nous mettre le résultat réél de tes fichiers obtenu par dnscmd et nslookup, ou encore la cmd effectuée avec ces outils. C'est toujours un peu plus délicat de traiter du texte.
Le problème en plus avec le résultat de ces commandes, c'est que parfois, les espaces sont remplacés par des caractères spéciaux. ( ex les espaces obtenus entre les champs avec dnscmd sont parfois code ascii 0x09 parfois 0x20(space) )
Tu peux alors supprimer ces espaces avec ltrim par ex en utilisant comme caractère [char]0x09
En passant par un fichier csv, pourquoi pas, mais la problèmatique reste la même, il faut que tu spécifies le caractère de séparation.
Le plus simple, peut-être serait peut-être d'utiliser les expressions régulières.
en imaginant une ligne du style
[code:1]$ligne=\" domaine.ext. A 10.100.100.100\"
$dnstest -cmatch '(\w+.\w*.*)\s+(A)\s+(\d+.\d+.\d+.\d+)'
#Résultat du match
$matches
#Extraction du résultat
$ip=$matches[3]
$type=$matches[2]
$Nom=$matches[1]
[/code:1]
Cette expression régulière devrait \"matcher\" seulement les lignes dns contenant un type d'hôte A et récupérer un nom dns de type nomdom.dom. ou dom.
Il faudra peut-être adapter la partie
La synchro de tes dns ne doit se faire que dans un sens, c'est ça ? Tu veux récupérer les nouveaux hôtes de ton dns externes vers ton interne seulement ?
L'idéal aurait été que tu puisses nous mettre le résultat réél de tes fichiers obtenu par dnscmd et nslookup, ou encore la cmd effectuée avec ces outils. C'est toujours un peu plus délicat de traiter du texte.
Le problème en plus avec le résultat de ces commandes, c'est que parfois, les espaces sont remplacés par des caractères spéciaux. ( ex les espaces obtenus entre les champs avec dnscmd sont parfois code ascii 0x09 parfois 0x20(space) )
Tu peux alors supprimer ces espaces avec ltrim par ex en utilisant comme caractère [char]0x09
En passant par un fichier csv, pourquoi pas, mais la problèmatique reste la même, il faut que tu spécifies le caractère de séparation.
Le plus simple, peut-être serait peut-être d'utiliser les expressions régulières.
en imaginant une ligne du style
[code:1]$ligne=\" domaine.ext. A 10.100.100.100\"
$dnstest -cmatch '(\w+.\w*.*)\s+(A)\s+(\d+.\d+.\d+.\d+)'
#Résultat du match
$matches
#Extraction du résultat
$ip=$matches[3]
$type=$matches[2]
$Nom=$matches[1]
[/code:1]
Cette expression régulière devrait \"matcher\" seulement les lignes dns contenant un type d'hôte A et récupérer un nom dns de type nomdom.dom. ou dom.
Il faudra peut-être adapter la partie
(\w+.\w*.*)
La synchro de tes dns ne doit se faire que dans un sens, c'est ça ? Tu veux récupérer les nouveaux hôtes de ton dns externes vers ton interne seulement ?
Connexion ou Créer un compte pour participer à la conversation.
- bordin
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 88
- Remerciements reçus 0
il y a 17 ans 5 mois #2867
par bordin
Réponse de bordin sur le sujet Re:Synchronisation de 2 DNS
salut,
je me doutais un peu qu'il fallait passer par des expressions régulières. Mais je n'en suis pas fan, bien que je reconnaisse la puissance du truc!!!
Faut que je me mette au regex!
je vais essayer de voir ce que çà donne avec tes conceils!
Cela dit oui, la synchro dns est dans un seul sens!!
Merci!
je me doutais un peu qu'il fallait passer par des expressions régulières. Mais je n'en suis pas fan, bien que je reconnaisse la puissance du truc!!!
Faut que je me mette au regex!
je vais essayer de voir ce que çà donne avec tes conceils!
Cela dit oui, la synchro dns est dans un seul sens!!
Merci!
La pièce jointe HotesInternetDif.txt est absente ou indisponible
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- PASCAULT
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 78
- Remerciements reçus 0
il y a 17 ans 5 mois #2868
par PASCAULT
Réponse de PASCAULT sur le sujet Re:Synchronisation de 2 DNS
Bonjour Camille,
Oui, je suis d'accord avec toi, les expressions régulières, ce n'est pas toujours évident de s'y mettre au début, même si l'on reconnait que c'est puissant.
J'ai testé ton fichier résultat avec le bout de code que je t'avais mis hier, et cela semble pas trop mal coller.
[code:1]
$dns=gc C:\temp\HotesInternetDif.txt
foreach ($ligne in $dns)
{
$ligne -cmatch '(\w+.\w*.*)\s+(A)\s+(\d+.\d+.\d+.\d+)'
$ip=$matches[3].Trim()
$type=$matches[2].Trim()
$Nom=$matches[1].Trim()
Write-Host $nom - $type - $ip
}[/code:1]
Sans passer par les expressions régulières, tu pourrais peut-être utilisé la méthode split() pour chaque ligne...
Oui, je suis d'accord avec toi, les expressions régulières, ce n'est pas toujours évident de s'y mettre au début, même si l'on reconnait que c'est puissant.
J'ai testé ton fichier résultat avec le bout de code que je t'avais mis hier, et cela semble pas trop mal coller.
[code:1]
$dns=gc C:\temp\HotesInternetDif.txt
foreach ($ligne in $dns)
{
$ligne -cmatch '(\w+.\w*.*)\s+(A)\s+(\d+.\d+.\d+.\d+)'
$ip=$matches[3].Trim()
$type=$matches[2].Trim()
$Nom=$matches[1].Trim()
Write-Host $nom - $type - $ip
}[/code:1]
Sans passer par les expressions régulières, tu pourrais peut-être utilisé la méthode split() pour chaque ligne...
Connexion ou Créer un compte pour participer à la conversation.
- bordin
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 88
- Remerciements reçus 0
il y a 17 ans 5 mois #2874
par bordin
Réponse de bordin sur le sujet Re:Synchronisation de 2 DNS
Bonjour,
En fait j'avais commencé à écrire une regex qui se rapproche de ce que tu viens de donner!!!
Je voudrai créer un 1er niveau de filtrage pour me retourner que les lignes au format:
Cas1: Hote TypeHote AdressIpHote
Cas2: Hote TTL TypeHote AdressIpHote
Sa permet de nettoyer les fichiers de tous ce qui est inutile!
$filtre='\w\W+\w\W+\d.'
Est ce que tu peux m'expliquer
'(\w+.\w*.*)\s+(A)\s+(\d+.\d+.\d+.\d+)' stp?
Merci!
cdt
En fait j'avais commencé à écrire une regex qui se rapproche de ce que tu viens de donner!!!
Je voudrai créer un 1er niveau de filtrage pour me retourner que les lignes au format:
Cas1: Hote TypeHote AdressIpHote
Cas2: Hote TTL TypeHote AdressIpHote
Sa permet de nettoyer les fichiers de tous ce qui est inutile!
$filtre='\w\W+\w\W+\d.'
Est ce que tu peux m'expliquer
'(\w+.\w*.*)\s+(A)\s+(\d+.\d+.\d+.\d+)' stp?
Merci!
cdt
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 5 mois #2875
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Synchronisation de 2 DNS
Salut,
gremlinsy écrit:
[code:1]
[String[]] $Delimiters=@(' ',\"`t\",\"server = \"«»)
$a=${c:\temp\HotesInternetDif.txt}
$Hotes=$a|select -last $($a.count-2)|% {
$Item=$_.split($Delimiters,[StringSplitOptions]::RemoveEmptyEntries);
New-Object PSObject|`
Add-member NoteProperty DNS $Item[0] -Pass|`
Add-member NoteProperty Type $Item[1] -Pass|`
Add-member NoteProperty Server $Item[2] -Pass
}
$Hotes
[/code:1]
[code:1]
DNS Type Server
--- ----
MonNom.com. A xxx.x.xxx.x
...
[/code:1]
Voir aussi :
www.microsoft.com/technet/scriptcenter/topics/msh/payette1.mspx
technet.microsoft.com/fr-fr/magazine/cc743166.aspx
blogs.msdn.com/powershell/archive/2008/0...-not-a-contract.aspx
gremlinsy écrit:
Pour ce cas présent c'est possible:Sans passer par les expressions régulières, tu pourrais peut-être utilisé la méthode split() pour chaque ligne...
[code:1]
[String[]] $Delimiters=@(' ',\"`t\",\"server = \"«»)
$a=${c:\temp\HotesInternetDif.txt}
$Hotes=$a|select -last $($a.count-2)|% {
$Item=$_.split($Delimiters,[StringSplitOptions]::RemoveEmptyEntries);
New-Object PSObject|`
Add-member NoteProperty DNS $Item[0] -Pass|`
Add-member NoteProperty Type $Item[1] -Pass|`
Add-member NoteProperty Server $Item[2] -Pass
}
$Hotes
[/code:1]
[code:1]
DNS Type Server
--- ----
MonNom.com. A xxx.x.xxx.x
...
[/code:1]
Voir aussi :
www.microsoft.com/technet/scriptcenter/topics/msh/payette1.mspx
technet.microsoft.com/fr-fr/magazine/cc743166.aspx
blogs.msdn.com/powershell/archive/2008/0...-not-a-contract.aspx
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.059 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Synchronisation de 2 DNS - Résolu