1 votes

Commande Powershell pour trouver une chaîne dans un fichier texte, puis extraire cette ligne ainsi que les lignes précédentes jusqu'à ce qu'une autre chaîne soit trouvée

Je travaille sur un script powershell pour trouver les périphériques hors ligne et envoyer une liste par e-mail aux utilisateurs quotidiennement. J'ai presque terminé le script, sauf pour un morceau. Je génère le texte interne d'un site web dans un fichier texte, puis j'utilise powershell pour extraire ce texte et récupérer les lignes contenant un certain nombre de chaînes spécifiques. Le contenu du fichier texte sera dans le format suivant :

Région : 15NT_ Pièce : Rm_42 Adresse : 3 Type : CL41 - Problèmes Supervision :

Adresse : 2 Type : Bed1P - HORS LIGNE Supervision :

Adresse : 3 Type : Bed2 - Module FB manquant Supervision :

Adresse : 4 Type : PC - HORS LIGNE Supervision :

Pour le texte ci-dessus, 2 lignes contiennent la chaîne "HORS LIGNE" qui est l'une des chaînes que je cherche. Pour le texte ci-dessus, je voudrais que le script extrait à partir de la dernière ligne contenant la chaîne "HORS LIGNE" et toutes les lignes précédentes, jusqu'à celle commençant par la chaîne "Région", puis ajoute ces lignes à un fichier texte.

Modifié : Voici le code original que j'utilisais :

$log = get-content C:\temp\RGS.txt
foreach ($line in $log) { 
if ($line -like "*Région*" -OU $line -like "*manquant*" -ou $line -like 
"*HORS LIGNE*" -ou $line -like "*interne*" -ou $line -like "*configuration*" - ou $line -like "*inconnu*") {
$line | out-file -FilePath "C:\temp\RGS Extract.txt" -Append
    }
}

Aussi, dans le texte source, il y aura plusieurs lignes qui commencent par le mot "Région", mais qui n'ont pas d'"Adresse" répertoriée en dessous avant la prochaine "Région". Je ne voudrais pas que ces lignes soient extraites car la région n'a pas d'adresses contenant l'un des mots clés que je recherche. Fondamentalement, chaque fois qu'une ligne commence par "Adresse" et contient l'un des mots clés, je voudrais ajouter cette ligne ainsi que toutes les lignes précédentes jusqu'à celle commençant par le mot "Région".

Voici un exemple plus large des données sources avec lesquelles je travaille :

Région : 7NT_ Pièce : RM_11 Adresse : 26 Type : CL41 - Problèmes Supervision: 
Adresse : 2 Type : Bed1P - HORS LIGNE Supervision: 
Adresse : 3 Type : Bed2 - Module FB manquant Supervision: 
Adresse : 6 Type : PCAudio Supervision: 
Adresse : 7 Type : PC Supervision: 
Adresse : 12 Type : PB2C Supervision: 
Adresse : 15 Type : Jack2 Supervision: 
Région : 7NT_ Pièce : Nourish_7116 Adresse : 27 Type : CL0 Supervision: 
Adresse : 4 Type : Duty Supervision: 
Région : 7NT_ Pièce : Rm_09 Adresse : 28 Type : CL41 -Problèmes Supervision: 
Adresse : 2 Type : Bed1P - HORS LIGNE Supervision: 
Adresse : 3 Type : Bed2 - Module FB manquant Supervision: 
Adresse : 6 Type : PCAudio Supervision: 
Adresse : 7 Type : PC Supervision: 
Adresse : 12 Type : PB2C Supervision: 
Adresse : 15 Type : Jack2 Supervision: 
Région : 7NT_ Pièce : Rm_12 Adresse : 29 Type : CL41 - Problèmes Supervision: 
Adresse : 2 Type : Bed1P - HORS LIGNE Supervision: 
Adresse : 3 Type : Bed2 - Module FB manquant Supervision: 
Adresse : 6 Type : PCAudio Supervision: 
Adresse : 7 Type : PC Supervision: 
Adresse : 12 Type : PB2C Supervision: 
Adresse : 15 Type : Jack2 Supervision: 
Région : 7NT_ Pièce : Rm_07 Adresse : 30 Type : CL41 - Problèmes Supervision: 
Adresse : 2 Type : Bed1P - HORS LIGNE Supervision: 
Adresse : 3 Type : Bed2 - Module FB manquant Supervision: 
Adresse : 6 Type : PCAudio Supervision: 
Adresse : 7 Type : PC Supervision: 
Adresse : 12 Type : PB2C Supervision: 
Adresse : 15 Type : Jack2 Supervision: 
Région : 7NT_ Pièce : Rm_10 Adresse : 31 Type : CL41 - Problèmes Supervision: 
Adresse : 2 Type : Bed1P - HORS LIGNE Supervision: 
Adresse : 3 Type : Bed2 - Module FB manquant Supervision: 
Adresse : 6 Type : PCAudio Supervision: 
Adresse : 7 Type : PC Supervision: 
Adresse : 12 Type : PB2C Supervision: 
Adresse : 15 Type : Jack2 Supervision: 
Région : 7NT_ Pièce : Med_7108 Adresse : 32 Type : CL0 Supervision: 
Adresse : 4 Type : Duty Supervision: 

Pour l'extrait ci-dessus, ce que je voudrais que powershell exporte dans un fichier est le suivant :

Région : 7NT_ Pièce : RM_11 Adresse : 26 Type : CL41 - Problèmes Supervision: 
Adresse : 2 Type : Bed1P - HORS LIGNE Supervision: 
Adresse : 3 Type : Bed2 - Module FB manquant Supervision: 

Région : 7NT_ Pièce : Rm_09 Adresse : 28 Type : CL41 - Problèmes Supervision: 
Adresse : 2 Type : Bed1P - HORS LIGNE Supervision: 
Adresse : 3 Type : Bed2 - Module FB manquant Supervision: 

Région : 7NT_ Pièce : Rm_12 Adresse : 29 Type : CL41 - Problèmes Supervision: 
Adresse : 2 Type : Bed1P - HORS LIGNE Supervision: 
Adresse : 3 Type : Bed2 - Module FB manquant Supervision: 

Région : 7NT_ Pièce : Rm_07 Adresse : 30 Type : CL41 - Problèmes Supervision: 
Adresse : 2 Type : Bed1P - HORS LIGNE Supervision: 
Adresse : 3 Type : Bed2 - Module FB manquant Supervision: 

Région : 7NT_ Pièce : Rm_10 Adresse : 31 Type : CL41 - Problèmes Supervision: 
Adresse : 2 Type : Bed1P - HORS LIGNE Supervision: 
Adresse : 3 Type : Bed2 - Module FB manquant Supervision:

Chaque fois qu'une ligne commençant par Adresse contient l'une des expressions que je recherche (hors ligne, manquant, interne, configuration), je voudrais que cette ligne soit affichée ET que la première ligne commençant par Région au-dessus de la ligne Adresse soit incluse. Si la ligne Région est identique pour plusieurs lignes Adresse, alors je voudrais seulement l'afficher une fois.

Dans le fichier HTML source à partir duquel je crée le fichier texte, les lignes Région sont toujours balisées avec h4 et les lignes Adresse sont toujours balisées avec h5, donc du point de vue HTML, si une ligne h5 contient l'un des mots clés, je voudrais l'exporter vers le fichier texte, ainsi que la première ligne h4 la précédant.

0voto

programmer365 Points 1

Vous pouvez utiliser ceci :

((gc "filepath.txt")|select-string -pattern "^Area") >>"output.txt"
([array]::reverse((gc "filepath.txt"))|select-string -pattern ".*OFFLINE.*") >>"output.txt"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X