Question Ajouter des entrées dns dans un fichier hosts

Plus d'informations
il y a 1 an 2 mois #29190 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...

Pièces jointes :

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

Plus d'informations
il y a 1 an 2 mois #29191 par Whitatrax
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

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.445 secondes
Propulsé par Kunena