Nous allons voir comment lire et écrire un fichier sur le disque. Dans l'exemple suivant, je vais créer un fichier texte, écrire quelques choses dedans, et lire son contenu.
#Chemin du fichier.
$fichier1 = "C:\Jumbor12.txt"
#Verifie si le fichier existe.
$test1 = Test-Path $fichier1
#Si le fichier n'existe pas, je crée un nouveau fichier.
if ($test1 -ne "True") { New-Item -ItemType file -Path $fichier1 -Force }
#Ajoute une ligne dans le fichier.
Add-Content -Path $fichier1 -Value "Nouvelle ligne !"
#Lit le contenu du fichier, et l'affiche dans la console.
get-content $fichier1 | foreach { write-host $_ }
#Fin.
$fichier1 = "C:\Jumbor12.txt"
#Verifie si le fichier existe.
$test1 = Test-Path $fichier1
#Si le fichier n'existe pas, je crée un nouveau fichier.
if ($test1 -ne "True") { New-Item -ItemType file -Path $fichier1 -Force }
#Ajoute une ligne dans le fichier.
Add-Content -Path $fichier1 -Value "Nouvelle ligne !"
#Lit le contenu du fichier, et l'affiche dans la console.
get-content $fichier1 | foreach { write-host $_ }
#Fin.
Cette dernière ligne mérite quelques explications. Je vais la décomposer un peu. "get-content $fichier1" lit le fichier. Si on tape seulement cette partie, la commande va afficher le contenu du fichier dans la console. Le "|" permet de rediriger le résultat vers une autre commande. Ici j'envoie le résultat vers une boucle foreach. La redirection "|" n'envoie pas tout le résultat d'un coup vers la commande suivante, il procède ligne par ligne. Chaque ligne renvoyée est alors contenue dans la variable "$_". La boucle foreach sert à traiter chaque ligne du fichier.
Nous allons voir maintenant un NotePad maison. Dans cet exemple, j'ouvre une fenêtre qui va afficher le contenu d'un fichier dans une TextBox multiligne. A la fermeture de la fenêtre, je transfère le contenu de la TextBox dans le fichier.
#Assembly.
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#Chemin du fichier.
$fichier1 = "C:\Jumbor12.txt"
#Ouvre une fenêtre.
$form = New-Object Windows.Forms.Form
$form.text = "Notepad maison."
$form.Size = New-Object System.Drawing.Size(250,250)
#Création d'une zone texte (TextBox).
$texte1 = New-Object Windows.Forms.TextBox
$texte1.Location = New-Object Drawing.Point 0,0
$texte1.Size = New-Object Drawing.Point 242,216
$texte1.Multiline = $True
$texte1.WordWrap = $False
$texte1.ReadOnly = $False
$texte1.backcolor = "white"
$texte1.ScrollBars = "Both"
#Lecture du fichier
#Verifie si le fichier existe.
$test1 = Test-Path $fichier1
#Si le fichier existe, je lis le fichier, sinon le contenu de la TextBox est vide.
if ($test1 -eq "True")
{
$t = ""
get-content $fichier1 | foreach { $t = $t + $_ + "`r`n" }
$texte1.Text = $t
}
else { $texte1.Text = "" }
#Attache le contrôle à la fenêtre.
$form.controls.add($texte1)
#Affiche le tout.
$form.ShowDialog()
#Sauvegarder TextBox.
#Verifier si le fichier existe.
$test1 = Test-Path $fichier1
#Si le fichier existe, je le supprime.
if ($test1 -eq "True") { Remove-Item $fichier1 -ErrorAction SilentlyContinue }
New-Item -ItemType file -Path $fichier1 -Force
#Création d'un nouveau fichier avec écriture du contenu de la TextBox.
foreach ($l in $texte1.Text) { Add-Content -Path $fichier1 -Value $l }
#Fin.
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#Chemin du fichier.
$fichier1 = "C:\Jumbor12.txt"
#Ouvre une fenêtre.
$form = New-Object Windows.Forms.Form
$form.text = "Notepad maison."
$form.Size = New-Object System.Drawing.Size(250,250)
#Création d'une zone texte (TextBox).
$texte1 = New-Object Windows.Forms.TextBox
$texte1.Location = New-Object Drawing.Point 0,0
$texte1.Size = New-Object Drawing.Point 242,216
$texte1.Multiline = $True
$texte1.WordWrap = $False
$texte1.ReadOnly = $False
$texte1.backcolor = "white"
$texte1.ScrollBars = "Both"
#Lecture du fichier
#Verifie si le fichier existe.
$test1 = Test-Path $fichier1
#Si le fichier existe, je lis le fichier, sinon le contenu de la TextBox est vide.
if ($test1 -eq "True")
{
$t = ""
get-content $fichier1 | foreach { $t = $t + $_ + "`r`n" }
$texte1.Text = $t
}
else { $texte1.Text = "" }
#Attache le contrôle à la fenêtre.
$form.controls.add($texte1)
#Affiche le tout.
$form.ShowDialog()
#Sauvegarder TextBox.
#Verifier si le fichier existe.
$test1 = Test-Path $fichier1
#Si le fichier existe, je le supprime.
if ($test1 -eq "True") { Remove-Item $fichier1 -ErrorAction SilentlyContinue }
New-Item -ItemType file -Path $fichier1 -Force
#Création d'un nouveau fichier avec écriture du contenu de la TextBox.
foreach ($l in $texte1.Text) { Add-Content -Path $fichier1 -Value $l }
#Fin.
Voici une petit exemple supplémentaire pour les besoins tout simple qui nécessite d'ouvrir un fichier, de faire un petit traitement et de la mettre à jour le fichier sans se compliquer la vie.
$fichier1 = "C:\Jumbor12.txt"
$texte1 = Get-Content $fichier1 | foreach {
#Affiche la ligne courante.
Write-Host $_
#Ajoute un commentaire.
$out = $_ + "OK"
#Retourne la ligne modifiée.
$out
}
Set-Content -Path $fichier1 -Value $texte1
$texte1 = Get-Content $fichier1 | foreach {
#Affiche la ligne courante.
Write-Host $_
#Ajoute un commentaire.
$out = $_ + "OK"
#Retourne la ligne modifiée.
$out
}
Set-Content -Path $fichier1 -Value $texte1