Question
Ecrire dans un fichier CSV plusieurs lignes
- Rouzel
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 1
- Remerciements reçus 0
il y a 3 ans 11 mois #29767
par Rouzel
Ecrire dans un fichier CSV plusieurs lignes a été créé par Rouzel
Bonjour à tous,
Je planche depuis un moment sur ce script et je n'arrive pas trouver la solution !
En gros, mon script va récupérer un fichier nommé ScopeDHCP2_$date.csv qui ne contient uniquement que des adresses IP, ligne par ligne.
[code:1]
$directory = \"C:\temp\"
$date = Get-Date -Format \"yyyyMMdd_HHmm\"
New-Item -path $directory -Name $date -ItemType directory
$MonFichier = get-content \"C:\temp\$date\ScopeDHCP2_$date.csv\"
[/code:1]
Jusqu'ici pas de problème.
Ensuite une boucle tourne pour ligne chaque ligne pour voir si cela lit bien mon fichier, et la c'est OK aussi.
[code:1]
$i = 0
$MonFichier | foreach {
$serveur = $_
write-host \"$($i++) $serveur\"
[/code:1]
Enfin, je souhaite récuperer via la commande Get-DhcpServerv4Lease tous les PCs en DHCP qui sont les adresses IP de mon fichier plus haut.
[code:1]Get-DhcpServerv4Lease -ComputerName srvdhcp -ScopeId $serveur | Export-Csv -Path \"C:\temp\$date\PCDHCP_$date.csv\"
$colonne2 = Import-Csv \"C:\temp\$date\PCDHCP_$date.csv\"
$colonne2 | select -Property IPAddress | export-csv -path \"C:\temp\$date\PCDHCP2_$date.csv\"[/code:1]
}
Et la le problème c'est qu'il m'écrase à chaque fois mon fichier C:\temp\$date\PCDHCP2_$date.csv\".
En fait, je souhaite que pour chaques réseaux ( 192.168.1.0, 192.168.2.0, 192.168.3.0, etc ..) récupérer chaque PC qui sont connectés en DHCP.
J'ai réussi à avoir un résultat en créant un fichier pour chaque réseau, mais je souhaite avoir tout cela dans un fichier CSV, comme par exemple:
Reseau
192.168.1.0
PCtest2
192.168.1.45
PCtest3
192.168.1.56
192.168.2.0
PCtest4
192.168.2.42
PCtest5
192.168.2.55
192.168.3.0
PCtest6
192.168.3.43
PCtest7
192.168.3.58
Voici le script au complet :
[code:1]$directory = \"C:\temp\"
$date = Get-Date -Format \"yyyyMMdd_HHmm\"
New-Item -path $directory -Name $date -ItemType directory
$MonFichier = get-content \"C:\temp\$date\ScopeDHCP2_$date.csv\"
$i = 0
$MonFichier | foreach {
$serveur = $_
# write-host \"$($i++) $serveur\"
Get-DhcpServerv4Lease -ComputerName srvdhcp -ScopeId $serveur | Export-Csv -Path \"C:\temp\$date\PCDHCP_$date.csv\"
$colonne2 = Import-Csv \"C:\temp\$date\PCDHCP_$date.csv\"
$colonne2 | select -Property IPAddress | export-csv -path \"C:\temp\$date\PCDHCP2_$date.csv\"
}[/code:1]
Et enfin, je souhaiterais pour ce script ajouter une autre valeur que IPAddress pour cette ligne comme par exemple Hostname :
[code:1]$colonne2 | select -Property IPAddress | export-csv -path \"C:\temp\$date\PCDHCP2_$date.csv\"[/code:1]
Auriez vous une petite idée ?
En vous remerciant par avance et vous souhaitant une agréable soirée
Je planche depuis un moment sur ce script et je n'arrive pas trouver la solution !
En gros, mon script va récupérer un fichier nommé ScopeDHCP2_$date.csv qui ne contient uniquement que des adresses IP, ligne par ligne.
[code:1]
$directory = \"C:\temp\"
$date = Get-Date -Format \"yyyyMMdd_HHmm\"
New-Item -path $directory -Name $date -ItemType directory
$MonFichier = get-content \"C:\temp\$date\ScopeDHCP2_$date.csv\"
[/code:1]
Jusqu'ici pas de problème.
Ensuite une boucle tourne pour ligne chaque ligne pour voir si cela lit bien mon fichier, et la c'est OK aussi.
[code:1]
$i = 0
$MonFichier | foreach {
$serveur = $_
write-host \"$($i++) $serveur\"
[/code:1]
Enfin, je souhaite récuperer via la commande Get-DhcpServerv4Lease tous les PCs en DHCP qui sont les adresses IP de mon fichier plus haut.
[code:1]Get-DhcpServerv4Lease -ComputerName srvdhcp -ScopeId $serveur | Export-Csv -Path \"C:\temp\$date\PCDHCP_$date.csv\"
$colonne2 = Import-Csv \"C:\temp\$date\PCDHCP_$date.csv\"
$colonne2 | select -Property IPAddress | export-csv -path \"C:\temp\$date\PCDHCP2_$date.csv\"[/code:1]
}
Et la le problème c'est qu'il m'écrase à chaque fois mon fichier C:\temp\$date\PCDHCP2_$date.csv\".
En fait, je souhaite que pour chaques réseaux ( 192.168.1.0, 192.168.2.0, 192.168.3.0, etc ..) récupérer chaque PC qui sont connectés en DHCP.
J'ai réussi à avoir un résultat en créant un fichier pour chaque réseau, mais je souhaite avoir tout cela dans un fichier CSV, comme par exemple:
Reseau
192.168.1.0
PCtest2
192.168.1.45
PCtest3
192.168.1.56
192.168.2.0
PCtest4
192.168.2.42
PCtest5
192.168.2.55
192.168.3.0
PCtest6
192.168.3.43
PCtest7
192.168.3.58
Voici le script au complet :
[code:1]$directory = \"C:\temp\"
$date = Get-Date -Format \"yyyyMMdd_HHmm\"
New-Item -path $directory -Name $date -ItemType directory
$MonFichier = get-content \"C:\temp\$date\ScopeDHCP2_$date.csv\"
$i = 0
$MonFichier | foreach {
$serveur = $_
# write-host \"$($i++) $serveur\"
Get-DhcpServerv4Lease -ComputerName srvdhcp -ScopeId $serveur | Export-Csv -Path \"C:\temp\$date\PCDHCP_$date.csv\"
$colonne2 = Import-Csv \"C:\temp\$date\PCDHCP_$date.csv\"
$colonne2 | select -Property IPAddress | export-csv -path \"C:\temp\$date\PCDHCP2_$date.csv\"
}[/code:1]
Et enfin, je souhaiterais pour ce script ajouter une autre valeur que IPAddress pour cette ligne comme par exemple Hostname :
[code:1]$colonne2 | select -Property IPAddress | export-csv -path \"C:\temp\$date\PCDHCP2_$date.csv\"[/code:1]
Auriez vous une petite idée ?
En vous remerciant par avance et vous souhaitant une agréable soirée
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 3 ans 11 mois #29770
par Philippe
Réponse de Philippe sur le sujet Re:Ecrire dans un fichier CSV plusieurs lignes
salut ScotchRV
très utile ton script !
alors il te manque l'option append sur le export-csv de ton script
[code:1] $colonne2 | select -Property IPAddress | export-csv -Append -path \"C:\temp\$date\PCDHCP2_$date.csv\"
[/code:1]
j'ai pas testé mais ça devrait suffire
par contre pour le hostname tu ne peut pas utilisé export-csv, car les csv se base sur le/les noms de colonnes pour enregistrer les données. il faut donc que les données inscritent dans le fichiers soit toutes au même format. or ce n'est pas le cas dans ta situation !
une autre approche avec add-content :
[code:1]
$directory = \"C:\temp\"
$date = Get-Date -Format \"yyyyMMdd_HHmm\"
New-Item -path $directory -Name $date -ItemType directory | out-null
Get-DhcpServerv4Scope -ComputerName srvdhcp | select -ExpandProperty scopeid | select -ExpandProperty IPAddressToString | set-content \"C:\temp\$date\ScopeDHCP2_$date.csv\"
$MonFichier = get-content \"C:\temp\$date\ScopeDHCP2_$date.csv\"
$i = 0
$MonFichier | foreach {
$serveur = $_
# write-host \"$($i++) $serveur\"
Get-DhcpServerv4Lease -ComputerName srvdhcp -ScopeId $serveur | Export-Csv -Path \"C:\temp\$date\PCDHCP_$date.csv\"
$colonne2 = Import-Csv \"C:\temp\$date\PCDHCP_$date.csv\"
\"reseau\" | add-Content -path \"C:\temp\$date\PCDHCP2_$date.csv\"
$serveur | add-Content -path \"C:\temp\$date\PCDHCP2_$date.csv\"
$colonne2 | foreach {
$_ | select -ExpandProperty hostname | add-Content -path \"C:\temp\$date\PCDHCP2_$date.csv\"
$_ | select -ExpandProperty IPAddress | add-Content -path \"C:\temp\$date\PCDHCP2_$date.csv\"
}
}
[/code:1]
bon confinement et bon week end<br><br>Message édité par: 6ratgus, à: 4/04/20 21:19
très utile ton script !
alors il te manque l'option append sur le export-csv de ton script
[code:1] $colonne2 | select -Property IPAddress | export-csv -Append -path \"C:\temp\$date\PCDHCP2_$date.csv\"
[/code:1]
j'ai pas testé mais ça devrait suffire
par contre pour le hostname tu ne peut pas utilisé export-csv, car les csv se base sur le/les noms de colonnes pour enregistrer les données. il faut donc que les données inscritent dans le fichiers soit toutes au même format. or ce n'est pas le cas dans ta situation !
une autre approche avec add-content :
[code:1]
$directory = \"C:\temp\"
$date = Get-Date -Format \"yyyyMMdd_HHmm\"
New-Item -path $directory -Name $date -ItemType directory | out-null
Get-DhcpServerv4Scope -ComputerName srvdhcp | select -ExpandProperty scopeid | select -ExpandProperty IPAddressToString | set-content \"C:\temp\$date\ScopeDHCP2_$date.csv\"
$MonFichier = get-content \"C:\temp\$date\ScopeDHCP2_$date.csv\"
$i = 0
$MonFichier | foreach {
$serveur = $_
# write-host \"$($i++) $serveur\"
Get-DhcpServerv4Lease -ComputerName srvdhcp -ScopeId $serveur | Export-Csv -Path \"C:\temp\$date\PCDHCP_$date.csv\"
$colonne2 = Import-Csv \"C:\temp\$date\PCDHCP_$date.csv\"
\"reseau\" | add-Content -path \"C:\temp\$date\PCDHCP2_$date.csv\"
$serveur | add-Content -path \"C:\temp\$date\PCDHCP2_$date.csv\"
$colonne2 | foreach {
$_ | select -ExpandProperty hostname | add-Content -path \"C:\temp\$date\PCDHCP2_$date.csv\"
$_ | select -ExpandProperty IPAddress | add-Content -path \"C:\temp\$date\PCDHCP2_$date.csv\"
}
}
[/code:1]
bon confinement et bon week end<br><br>Message édité par: 6ratgus, à: 4/04/20 21:19
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.063 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Ecrire dans un fichier CSV plusieurs lignes