Question
Chercher un bloc dans un fichier
- Christophe
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 4 ans 4 mois #29510
par Christophe
Chercher un bloc dans un fichier a été créé par Christophe
Bonjour à tout le monde,
J'ai une liste de logs au fortmat txt. Chaque log correspond à la création d'un profil d'un utilisateur.
Ce fichier contient beaucoup mais souhaiterais exclusivement extraire ce qu'il y a entre
[code:1]Status Local Remote Network
[/code:1] et
idéalement, stocker le tout dans un autre fichier j'ai plus de 1100 fichiers à parcourir.
Pourriez-vous m'aider ? Je suis perdu, je ne sais pas comment m'y prendre
Merci d'avance,
Christophe
J'ai une liste de logs au fortmat txt. Chaque log correspond à la création d'un profil d'un utilisateur.
La pièce jointe johndoe_IDT01049_Login.txt est absente ou indisponible
Ce fichier contient beaucoup mais souhaiterais exclusivement extraire ce qu'il y a entre
[code:1]Status Local Remote Network
[/code:1] et
The command completed successfully.
idéalement, stocker le tout dans un autre fichier j'ai plus de 1100 fichiers à parcourir.
Pourriez-vous m'aider ? Je suis perdu, je ne sais pas comment m'y prendre
Merci d'avance,
Christophe
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 4 ans 4 mois #29511
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Chercher un bloc dans un fichier
Salut,
inspire toi de ce code qui supprime une signature d'un script:
[code:1]
#Remove-AuthenticodeSignature.ps1
Filter Remove-AuthenticodeSignature{
#([Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding] $Encoding=\"ASCII\"«»)
function Parse([String] $FileName)
{ #renvoi toutes les lignes sauf celles du bloc de signature
$isSignatureBloc=$False
Get-Content -Path $FileName|
Foreach-Object {
switch ($_)
{
\"# SIG # Begin signature block\" {$isSignatureBloc=$True;continue}
\"# SIG # End signature block\" {$isSignatureBloc=$False;Continue}
default {
if ($isSignatureBloc -eq $false)
#On traite les lignes qui ne se trouvent pas dans le bloc de signature
{$_}
}#default
}#Switch
}#Foreach
}#Parse
if ($_ )
{
#Récupére un nom de fichier créé par l'OS
$TempFile = [IO.Path]::GetTempFileName()
$FullPath=Resolve-Path \"$_\"
Write-Debug \"$TempFile\"
Write-Debug \"$FullPath\"
#Extrait toutes les lignes sauf la signature dans un fichier temporaire
Parse \"$FullPath\"|Set-Content \"$TempFile\"
#Ecrase le fichier d'origine à partir du fichier temporaire
#$FileInfo.Replace ne fonctionne pas car %Temp%
#peut être sur un disque différent de celui de la source :/
Get-Content \"$TempFile\"|Set-Content \"$FullPath\"
Remove-Item \"$TempFile\"
}
else {Write-Error \"[Remove-AuthenticodeSignature] Ce filtre a reçu une donnée `$null du pipeline.\"}
}
[/code:1]
Il te faut changer le contenu des chaines du switch avec tes valeur de début et celle de fin.
inspire toi de ce code qui supprime une signature d'un script:
[code:1]
#Remove-AuthenticodeSignature.ps1
Filter Remove-AuthenticodeSignature{
#([Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding] $Encoding=\"ASCII\"«»)
function Parse([String] $FileName)
{ #renvoi toutes les lignes sauf celles du bloc de signature
$isSignatureBloc=$False
Get-Content -Path $FileName|
Foreach-Object {
switch ($_)
{
\"# SIG # Begin signature block\" {$isSignatureBloc=$True;continue}
\"# SIG # End signature block\" {$isSignatureBloc=$False;Continue}
default {
if ($isSignatureBloc -eq $false)
#On traite les lignes qui ne se trouvent pas dans le bloc de signature
{$_}
}#default
}#Switch
}#Foreach
}#Parse
if ($_ )
{
#Récupére un nom de fichier créé par l'OS
$TempFile = [IO.Path]::GetTempFileName()
$FullPath=Resolve-Path \"$_\"
Write-Debug \"$TempFile\"
Write-Debug \"$FullPath\"
#Extrait toutes les lignes sauf la signature dans un fichier temporaire
Parse \"$FullPath\"|Set-Content \"$TempFile\"
#Ecrase le fichier d'origine à partir du fichier temporaire
#$FileInfo.Replace ne fonctionne pas car %Temp%
#peut être sur un disque différent de celui de la source :/
Get-Content \"$TempFile\"|Set-Content \"$FullPath\"
Remove-Item \"$TempFile\"
}
else {Write-Error \"[Remove-AuthenticodeSignature] Ce filtre a reçu une donnée `$null du pipeline.\"}
}
[/code:1]
Il te faut changer le contenu des chaines du switch avec tes valeur de début et celle de fin.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Christophe
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 4 ans 4 mois #29514
par Christophe
Réponse de Christophe sur le sujet Re:Chercher un bloc dans un fichier
Salut,
Merci beaucoup, je vais lire cela attentivement !
Christophe
Merci beaucoup, je vais lire cela attentivement !
Christophe
Connexion ou Créer un compte pour participer à la conversation.
- Christophe
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 13
- Remerciements reçus 0
il y a 4 ans 4 mois #29530
par Christophe
Réponse de Christophe sur le sujet Re:Chercher un bloc dans un fichier
Bonjour,
Désolé, j'ai du recréer un nouveau compte, je ne me rappelle pas mes codes.
Concernant l'exemple, comment doit-on utiliser ce \"Filter\" au début du script ?
Je ne peux pas appeler directement ?
[code:1]Filter Remove-AuthenticodeSignature{}[/code:1]
Merci pour vos lumières !!!
Christophe
Désolé, j'ai du recréer un nouveau compte, je ne me rappelle pas mes codes.
Concernant l'exemple, comment doit-on utiliser ce \"Filter\" au début du script ?
Je ne peux pas appeler directement ?
[code:1]Filter Remove-AuthenticodeSignature{}[/code:1]
Merci pour vos lumières !!!
Christophe
Connexion ou Créer un compte pour participer à la conversation.
- Troxsa
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 30
- Remerciements reçus 0
il y a 4 ans 4 mois #29531
par Troxsa
Réponse de Troxsa sur le sujet Re:Chercher un bloc dans un fichier
Moi j'ai deja fait un truc dans le style et j'ai fait plus ou moins comme ça :
[code:1]$fichier = Get-Content \".\fichier.txt\" -Encoding Default
$result = $fichier | Select-String -Pattern \"--+.\",\"^The command completed successfully.$\"
$result
Foreach($item in $result)
{
if($item.Line -match \"--+.\"«»)
{
$Header = $item.LineNumber - 3 # Header
continue
}
$fichier[($Header)..($item.LineNumber-2)]
}[/code:1]
[code:1]$fichier = Get-Content \".\fichier.txt\" -Encoding Default
$result = $fichier | Select-String -Pattern \"--+.\",\"^The command completed successfully.$\"
$result
Foreach($item in $result)
{
if($item.Line -match \"--+.\"«»)
{
$Header = $item.LineNumber - 3 # Header
continue
}
$fichier[($Header)..($item.LineNumber-2)]
}[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Christophe
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 13
- Remerciements reçus 0
il y a 4 ans 4 mois #29532
par Christophe
Réponse de Christophe sur le sujet Re:Chercher un bloc dans un fichier
Bonjour,
Ah oui, c'est une autre approche !
C'est génial, je viens de tester, le résultat est parfait.
Une dernière petite chose, comment puis-je sauver le résultat ?
J'ai rajouté une [code:1]Set-Content \"c:\temp\essai3.txt\" -Value $result[/code:1] comme dernière ligne du script mais le contenu est alors [code:1]
The command completed successfully.
The command completed successfully.
[/code:1]
J'ai dû louper quelque chose, mais je ne vois pas quoi
Merci à nouveau !
Christophe
Ah oui, c'est une autre approche !
C'est génial, je viens de tester, le résultat est parfait.
Une dernière petite chose, comment puis-je sauver le résultat ?
J'ai rajouté une [code:1]Set-Content \"c:\temp\essai3.txt\" -Value $result[/code:1] comme dernière ligne du script mais le contenu est alors [code:1]
The command completed successfully.
The command completed successfully.
[/code:1]
J'ai dû louper quelque chose, mais je ne vois pas quoi
Merci à nouveau !
Christophe
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.092 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Chercher un bloc dans un fichier