Question Ecrire dans un fichier CSV plusieurs lignes

Plus d'informations
il y a 3 ans 11 mois #29767 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

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

Plus d'informations
il y a 3 ans 11 mois #29770 par Philippe
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

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

Temps de génération de la page : 0.063 secondes
Propulsé par Kunena