Advertisement
Thunder-Menu

LastLineLog0x.ps1

Aug 4th, 2023
885
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PowerShell 7.27 KB | Source Code | 0 0
  1. Add-Type -AssemblyName System.Windows.Forms
  2.  
  3. # Définir le chemin du fichier de configuration JSON
  4. $configFile = "config.json"
  5.  
  6. # Fonction pour sauvegarder les paramètres dans un fichier JSON
  7. function SaveToFile($filePath, $isChecked, $isAutoSearchChecked) {
  8.     $jsonObject = @{
  9.         "FilePath" = $filePath
  10.         "IsChecked" = $isChecked
  11.         "IsAutoSearchChecked" = $isAutoSearchChecked
  12.     } | ConvertTo-Json
  13.  
  14.     $jsonObject | Out-File -FilePath $configFile -Encoding UTF8
  15. }
  16.  
  17. # Fonction pour charger les paramètres depuis le fichier JSON
  18. function LoadFileSelection() {
  19.     if (Test-Path $configFile) {
  20.         $jsonObject = Get-Content -Path $configFile | ConvertFrom-Json
  21.         $filePath = $jsonObject.FilePath
  22.         $isChecked = $jsonObject.IsChecked
  23.         $isAutoSearchChecked = $jsonObject.IsAutoSearchChecked
  24.         return $filePath, $isChecked, $isAutoSearchChecked
  25.     }
  26.     return $null, $null, $null
  27. }
  28.  
  29. # Fonction pour rechercher la dernière ligne contenant "0x" dans un fichier
  30. function FindLastLineWithHex($filePath) {
  31.     $content = Get-Content -Path $filePath
  32.     $lastLine = $content | Where-Object { $_ -match "0x" }
  33.     if ($lastLine.Count -gt 0) {
  34.         $lastLine = $lastLine | Select-Object -Last 1
  35.         return $lastLine
  36.     }
  37.     return $null
  38. }
  39.  
  40. # Crée un formulaire
  41. $form = New-Object Windows.Forms.Form
  42. $form.Text = "Sélectionner un fichier et écrire dans un autre"
  43. $form.Size = New-Object Drawing.Size(600, 300)
  44. $form.StartPosition = "CenterScreen"
  45.  
  46. # Crée une case à cocher pour sélectionner un fichier
  47. $checkBoxSelectFile = New-Object Windows.Forms.CheckBox
  48. $checkBoxSelectFile.Text = "Sélectionner un fichier"
  49. $checkBoxSelectFile.Location = New-Object Drawing.Point(20, 20)
  50.  
  51. # Charge le chemin du fichier sélectionné et l'état de recherche depuis le fichier JSON
  52. $filePath, $isChecked, $isAutoSearchChecked = LoadFileSelection
  53. $checkBoxSelectFile.Checked = $isChecked
  54. $form.Controls.Add($checkBoxSelectFile)
  55.  
  56. # Crée une case à cocher pour activer/désactiver la recherche automatique
  57. $checkBoxAutoSearch = New-Object Windows.Forms.CheckBox
  58. $checkBoxAutoSearch.Text = "Recherche automatique"
  59. $checkBoxAutoSearch.Location = New-Object Drawing.Point(20, 50)
  60. $checkBoxAutoSearch.Checked = $isAutoSearchChecked
  61. $form.Controls.Add($checkBoxAutoSearch)
  62.  
  63. # Crée un champ de texte pour afficher/écrire le chemin du fichier sélectionné
  64. $textBoxFilePath = New-Object Windows.Forms.TextBox
  65. $textBoxFilePath.Location = New-Object Drawing.Point(20, 90)
  66. $textBoxFilePath.Width = 400
  67. $form.Controls.Add($textBoxFilePath)
  68.  
  69. # Crée un champ de texte pour le nom du fichier cible
  70. $textBoxTargetFileName = New-Object Windows.Forms.TextBox
  71. $textBoxTargetFileName.Location = New-Object Drawing.Point(20, 130)
  72. $textBoxTargetFileName.Width = 400
  73. $textBoxTargetFileName.Text = "result.txt"
  74. $form.Controls.Add($textBoxTargetFileName)
  75.  
  76. # Crée un bouton pour lancer la recherche manuellement
  77. $buttonWriteLine = New-Object Windows.Forms.Button
  78. $buttonWriteLine.Text = "Lancer la recherche et Sauvegarder"
  79. $buttonWriteLine.Location = New-Object Drawing.Point(20, 170)
  80. $form.Controls.Add($buttonWriteLine)
  81.  
  82. # Gérer l'événement Click du bouton "Lancer la recherche"
  83. $buttonWriteLine.Add_Click({
  84.     if ($filePath -and (Test-Path $filePath)) {
  85.         $targetFile = Join-Path -Path (Get-Location) -ChildPath $textBoxTargetFileName.Text
  86.         $lastLine = FindLastLineWithHex $filePath
  87.  
  88.         if ($lastLine) {
  89.             $currentContent = ""
  90.             if (Test-Path $targetFile) {
  91.                 $currentContent = Get-Content -Path $targetFile -Raw
  92.             }
  93.             $newContent = $currentContent + $lastLine
  94.             $newContent | Out-File -FilePath $targetFile -Encoding UTF8
  95.             Write-Host "Dernière ligne écrite dans '$targetFile'."
  96.         }
  97.         else {
  98.             [System.Windows.Forms.MessageBox]::Show("Aucune ligne contenant '0x' n'a été trouvée dans le fichier sélectionné.", "Erreur", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
  99.         }
  100.     }
  101.     else {
  102.         [System.Windows.Forms.MessageBox]::Show("Veuillez sélectionner un fichier valide.", "Erreur", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
  103.     }
  104. })
  105.  
  106. # Gérer l'événement CheckedChanged de la case à cocher pour afficher le OpenFileDialog
  107. $checkBoxSelectFile.Add_CheckedChanged({
  108.     $buttonWriteLine.Enabled = -not $checkBoxSelectFile.Checked
  109.  
  110.     if ($checkBoxSelectFile.Checked) {
  111.         # Afficher la boîte de dialogue pour sélectionner un fichier
  112.         $openFileDialog = New-Object Windows.Forms.OpenFileDialog
  113.         $openFileDialog.Title = "Sélectionner un fichier"
  114.         $openFileDialog.Filter = "Tous les fichiers (*.*)|*.*"
  115.         $result = $openFileDialog.ShowDialog()
  116.         if ($result -eq [Windows.Forms.DialogResult]::OK) {
  117.             $filePath = $openFileDialog.FileName
  118.             $textBoxFilePath.Text = $filePath
  119.             # Sauvegarder l'état de la case à cocher dans le fichier JSON
  120.             SaveToFile $filePath $checkBoxSelectFile.Checked $checkBoxAutoSearch.Checked
  121.         }
  122.     }
  123.     else {
  124.         # Effacer le chemin du fichier sélectionné
  125.         $filePath = $null
  126.         $textBoxFilePath.Text = ""
  127.         # Sauvegarder l'état de la case à cocher dans le fichier JSON
  128.         SaveToFile $filePath $checkBoxSelectFile.Checked $checkBoxAutoSearch.Checked
  129.     }
  130. })
  131.  
  132. # Gérer l'événement CheckedChanged de la case à cocher pour la recherche automatique
  133. $checkBoxAutoSearch.Add_CheckedChanged({
  134.     # Sauvegarder l'état de la case à cocher dans le fichier JSON
  135.     SaveToFile $filePath $checkBoxSelectFile.Checked $checkBoxAutoSearch.Checked
  136.  
  137.     if ($checkBoxAutoSearch.Checked) {
  138.         # Désactiver le bouton "Lancer la recherche" lorsque la recherche automatique est activée
  139.         $buttonWriteLine.Enabled = $false
  140.         # Lancer la recherche automatiquement si la case "Recherche automatique" est cochée
  141.         $buttonWriteLine.PerformClick()
  142.     } else {
  143.         # Activer le bouton "Lancer la recherche" lorsque la recherche automatique est désactivée
  144.         $buttonWriteLine.Enabled = $true
  145.     }
  146. })
  147.  
  148. # Mettre à jour l'affichage initial des contrôles en fonction de l'état des cases à cocher
  149. $buttonWriteLine.Enabled = -not $checkBoxSelectFile.Checked
  150.  
  151. # Charger le chemin du fichier sélectionné au démarrage de l'application
  152. $textBoxFilePath.Text = $filePath
  153.  
  154. # Si le chemin du fichier est défini et la case est cochée, recherchez automatiquement la dernière ligne contenant "0x" et enregistrez-la dans un fichier
  155. if ($filePath -and $isChecked -and $isAutoSearchChecked -and (Test-Path $filePath)) {
  156.     $targetFile = Join-Path -Path (Get-Location) -ChildPath $textBoxTargetFileName.Text
  157.     $lastLine = FindLastLineWithHex $filePath
  158.  
  159.     if ($lastLine) {
  160.         $currentContent = ""
  161.         if (Test-Path $targetFile) {
  162.             $currentContent = Get-Content -Path $targetFile -Raw
  163.         }
  164.         $newContent = $currentContent + $lastLine
  165.         $newContent | Out-File -FilePath $targetFile -Encoding UTF8
  166.         Write-Host "Dernière ligne écrite dans '$targetFile'."
  167.     }
  168. }
  169.  
  170. # Affiche le formulaire
  171. $form.ShowDialog() | Out-Null
  172.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement