Question
Ajouter des entrées dns dans un fichier hosts
- Abdel59700
- Auteur du sujet
- Visiteur
il y a 4 ans 7 mois #29190
par Abdel59700
Ajouter des entrées dns dans un fichier hosts a été créé par Abdel59700
Salut à tous,
J'ai besoin de faire un script powershell qui:
1°) ajoute des entrée DNS au fichier C:\Windows\System32\drivers\etc\hosts à l'aide d'un fichier csv
2°) encadre ces entrées dns entre 2 chaînes de caractères qui annonce le \"début des entrées dns\" et la \"fin des entrées dns\".
3°) n'écrase pas les entrée dns déjà présentent dans le fichier hosts.
J'ai fait un script mais il y a des erreurs quand je le joue et je ne vois pas du tout ce qui cloche.
[code:1]
$file = \"C:\Windows\System32\drivers\etc\hosts\"
$data = Import-Csv D:\hosts_modify\liste_des_entrees_dns_hosts.csv -Delimiter \";\"
function add-host([string]$filename, [string]$ip, [string]$hostname) {
remove-host $filename $hostname
$ip + \"`t`t\" + $hostname | Out-File -encoding ASCII -append $filename
}
function remove-host([string]$filename, [string]$hostname) {
$c = Get-Content $filename
$newLines = @()
foreach ($line in $c) {
$bits = [regex]::«»Split($line, \"\t+\"«»)
if ($bits.count -eq 2) {
if ($bits[1] -ne $hostname) {
$newLines += $line
}
} else {
$newLines += $line
}
# Write file
Clear-Content $filename
foreach ($line in $newLines) {
$line | Out-File -encoding ASCII -append $filename
}
}
function print-hosts([string]$filename) {
$c = Get-Content $filename
foreach ($line in $c) {
$bits = [regex]::«»Split($line, \"\t+\"«»)
if ($bits.count -eq 2) {
Write-Host $bits[0] `t`t $bits[1]
}
}
}
try {
if ($args[0] -eq \"add\"«») {
Add-Content $file \"`n*****Ajout CSI*****\"
foreach ($item in $data) {
$filename = $($item.filename)
$iP = $($item.ip)
$hostname = $($item.hostname)
printf $filename $ip, $hostname
add-host $filename $ip, $hostname
}
Add-Content $file \"`*****Fin Ajout CSI*****\"
}
} elseif ($args[0] -eq \"remove\"«») {
if ($args.count -lt 2) {
throw \"Not enough arguments for remove.\"
} else {
remove-host $file $args[1]
}
} elseif ($args[0] -eq \"show\"«») {
print-hosts $file
} else {
throw \"Invalid operation '\" + $args[0] + \"' - must be one of 'add', 'remove', 'show'.\"
}
} catch {
Write-Host $error[0]
Write-Host \"`nUsage: hosts add <ip> <hostname>`n hosts remove <hostname>`n hosts show\"
}
function printf($a) {
foreach ($i in $a) {
Write-Host $i
}
}
[/code:1]
Voici les erreurs que j'ai :
Au caractère D:\hosts_modify\test_modifyhost.ps1:47 : 6
+ } elseif ($args[0] -eq \"remove\") {
+ ~
Le bloc Catch ou Finally manque dans l’instruction Try.
Au caractère D:\hosts_modify\test_modifyhost.ps1:47 : 38
+ } elseif ($args[0] -eq \"remove\") {
+ ~
Jeton inattendu « { » dans l’expression ou l’instruction.
Au caractère D:\hosts_modify\test_modifyhost.ps1:53 : 7
+ } elseif ($args[0] -eq \"show\") {
+ ~~~~~~
Jeton inattendu « elseif » dans l’expression ou l’instruction.
Au caractère D:\hosts_modify\test_modifyhost.ps1:53 : 36
+ } elseif ($args[0] -eq \"show\") {
+ ~
Jeton inattendu « { » dans l’expression ou l’instruction.
Au caractère D:\hosts_modify\test_modifyhost.ps1:55 : 7
+ } else {
+ ~~~~
Jeton inattendu « else » dans l’expression ou l’instruction.
+ CategoryInfo : ParserError: ( [], ParseException
+ FullyQualifiedErrorId : MissingCatchOrFinally
Merci pour votre aide...
J'ai besoin de faire un script powershell qui:
1°) ajoute des entrée DNS au fichier C:\Windows\System32\drivers\etc\hosts à l'aide d'un fichier csv
2°) encadre ces entrées dns entre 2 chaînes de caractères qui annonce le \"début des entrées dns\" et la \"fin des entrées dns\".
3°) n'écrase pas les entrée dns déjà présentent dans le fichier hosts.
J'ai fait un script mais il y a des erreurs quand je le joue et je ne vois pas du tout ce qui cloche.
[code:1]
$file = \"C:\Windows\System32\drivers\etc\hosts\"
$data = Import-Csv D:\hosts_modify\liste_des_entrees_dns_hosts.csv -Delimiter \";\"
function add-host([string]$filename, [string]$ip, [string]$hostname) {
remove-host $filename $hostname
$ip + \"`t`t\" + $hostname | Out-File -encoding ASCII -append $filename
}
function remove-host([string]$filename, [string]$hostname) {
$c = Get-Content $filename
$newLines = @()
foreach ($line in $c) {
$bits = [regex]::«»Split($line, \"\t+\"«»)
if ($bits.count -eq 2) {
if ($bits[1] -ne $hostname) {
$newLines += $line
}
} else {
$newLines += $line
}
# Write file
Clear-Content $filename
foreach ($line in $newLines) {
$line | Out-File -encoding ASCII -append $filename
}
}
function print-hosts([string]$filename) {
$c = Get-Content $filename
foreach ($line in $c) {
$bits = [regex]::«»Split($line, \"\t+\"«»)
if ($bits.count -eq 2) {
Write-Host $bits[0] `t`t $bits[1]
}
}
}
try {
if ($args[0] -eq \"add\"«») {
Add-Content $file \"`n*****Ajout CSI*****\"
foreach ($item in $data) {
$filename = $($item.filename)
$iP = $($item.ip)
$hostname = $($item.hostname)
printf $filename $ip, $hostname
add-host $filename $ip, $hostname
}
Add-Content $file \"`*****Fin Ajout CSI*****\"
}
} elseif ($args[0] -eq \"remove\"«») {
if ($args.count -lt 2) {
throw \"Not enough arguments for remove.\"
} else {
remove-host $file $args[1]
}
} elseif ($args[0] -eq \"show\"«») {
print-hosts $file
} else {
throw \"Invalid operation '\" + $args[0] + \"' - must be one of 'add', 'remove', 'show'.\"
}
} catch {
Write-Host $error[0]
Write-Host \"`nUsage: hosts add <ip> <hostname>`n hosts remove <hostname>`n hosts show\"
}
function printf($a) {
foreach ($i in $a) {
Write-Host $i
}
}
[/code:1]
Voici les erreurs que j'ai :
Au caractère D:\hosts_modify\test_modifyhost.ps1:47 : 6
+ } elseif ($args[0] -eq \"remove\") {
+ ~
Le bloc Catch ou Finally manque dans l’instruction Try.
Au caractère D:\hosts_modify\test_modifyhost.ps1:47 : 38
+ } elseif ($args[0] -eq \"remove\") {
+ ~
Jeton inattendu « { » dans l’expression ou l’instruction.
Au caractère D:\hosts_modify\test_modifyhost.ps1:53 : 7
+ } elseif ($args[0] -eq \"show\") {
+ ~~~~~~
Jeton inattendu « elseif » dans l’expression ou l’instruction.
Au caractère D:\hosts_modify\test_modifyhost.ps1:53 : 36
+ } elseif ($args[0] -eq \"show\") {
+ ~
Jeton inattendu « { » dans l’expression ou l’instruction.
Au caractère D:\hosts_modify\test_modifyhost.ps1:55 : 7
+ } else {
+ ~~~~
Jeton inattendu « else » dans l’expression ou l’instruction.
+ CategoryInfo : ParserError: ( [], ParseException
+ FullyQualifiedErrorId : MissingCatchOrFinally
Merci pour votre aide...
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Quentin
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 47
- Remerciements reçus 0
il y a 4 ans 7 mois #29191
par Quentin
Réponse de Quentin sur le sujet Re:Ajouter des entrées dns dans un fichier hosts
Bonjour,
Devant ton elseif tu fermes ton \"Try\"
Je pense que ça va corriger pas mal de choses
Regarde la quote, j'ai ajouté des chiffrages
Whitatrax
Devant ton elseif tu fermes ton \"Try\"
Je pense que ça va corriger pas mal de choses
Regarde la quote, j'ai ajouté des chiffrages
try { (1)
if ($args[0] -eq \"add\") {(2)
Add-Content $file \"`n*****Ajout CSI*****\"
foreach ($item in $data) {(3)
$filename = $($item.filename)
$iP = $($item.ip)
$hostname = $($item.hostname)
printf $filename $ip, $hostname
add-host $filename $ip, $hostname
} (fin3)
Add-Content $file \"`*****Fin Ajout CSI*****\"
}(fin2)
}(fin1) elseif ($args[0] -eq \"remove\") {
Whitatrax
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.069 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Ajouter des entrées dns dans un fichier hosts