IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Powershell : pourquoi à un endroit il garde toutes les données initiales, à un autre ça change complètement ? [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2021
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2021
    Messages : 24
    Points : 18
    Points
    18
    Par défaut Powershell : pourquoi à un endroit il garde toutes les données initiales, à un autre ça change complètement ?
    salut. Dans mon article précédent, j'ai réussi à faire un parsing dans un fichier html. Dans ce code ci-dessous, je voulais copier le contenu de la tag`<link rel="canonical` à d'autres tags, telles que `<meta property="og:url" ` et tag `@id": "`

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $sourcedir = "C:\Folder1\"
    $resultsdir = "C:\Folder1\"
     
    <# Replace canonical tag with <meta property="og:url"              #> 
     
    Get-ChildItem -Path $sourcedir -Filter *.html | ForEach-Object {
       $content = Get-Content -Path $_.FullName -Raw
       $replaceValue = (Select-String -InputObject $content -Pattern '(?<=<link rel="canonical" href=").+(?=" />)').Matches.Value
       $content = $content -replace '(?<=<meta property="og:url" content=").+(?="/>)',$replaceValue
        Set-Content -Path $resultsdir\$($_.name) $content
     
       $content = $content -replace '(?<="@id": ").+(?=")',$replaceValue
        Set-Content -Path $resultsdir\$($_.name) $content
    	}

    Le code fonctionne bien. Mais il y a un problème. Comme vous pouvez le voir dans ces 2 pages html ci-dessous (j'ai mis un lien sur celles-ci), dans la version courte, il remplace uniquement les balises que je veux, et rien d'autre ne change sur html. Super !

    Mais, dans la version complète, certaines lignes sont doublées, d'autres lignes sont supprimées, etc. Le même code Powershell fait des dégâts. Pourquoi donc? J'ai besoin de changer uniquement les balises html que je veux, et de ne modifier aucune autre ligne du fichier.

    Version courte:

    https://pastebin.com/2BBSn830

    Version complète:

    https://pastebin.com/qLzSZyS8

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    N'ayant pas le fichier d'origine j'ai du mal à voir les bonnes/mauvaises modifications

  3. #3
    Membre à l'essai
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2021
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2021
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Je l'ai compris. Pour faire une analyse en Powershell, avec regex, il faut utiliser le même "start" et le même "stop". Et vous devez faire attention à la formule regex :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $sourcedir = "C:\Folder1\"
    $resultsdir = "C:\Folder1\"
     
    Get-ChildItem -Path $sourcedir -Filter *.html | ForEach-Object {
        $content = Get-Content -Path $_.FullName -Raw
        $replaceValue = (Select-String -InputObject $content -Pattern '(?<=<link rel="canonical" href=").*(")').Matches.Value
        $content = $content -replace '(?<=<meta property="og:url" content=").*(")',$replaceValue
        $content = $content -replace '(?<="@id": ").*(")',$replaceValue
        Set-Content -Path $resultsdir\$($_.name) $content
    }

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Tu peux clôturer le sujet si c'est le cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/04/2021, 16h03
  2. Réponses: 1
    Dernier message: 31/12/2008, 16h50
  3. Réponses: 11
    Dernier message: 04/05/2006, 11h50
  4. Effacer toutes les données d'une colonne
    Par denisfavre dans le forum Access
    Réponses: 5
    Dernier message: 12/10/2005, 15h20
  5. Réponses: 2
    Dernier message: 11/10/2005, 09h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo