TUTOS.EU

Isoler des mots dans des lignes en powershell

Extraire des données dans des lignes en powershell

Imaginez que vous avez une variable qui contient "Domain\MonLogin"

Vous voulez extraire ce qui est à gauche ou à droite du caractère \

Le plus simple pour cela est d'utiliser la fonction Split.
Split retourne un tableau et séparant les éléments en fonction du caractère donné, ici \

Le 1er élément du tableau numéroté 0 contiendra Domain
et le second, numéroté 1, contiendra MonLogin

clear-host

$NomVariable = "Domain\MonLogin"

$partieAvant = $NomVariable.Split('\')[0]
$partieApres = $NomVariable.Split('\')[1]

Write-Output $partieAvant
Write-Output $partieApres
Lien vers le fichier : cliquez ici Copier le code

Si le séparateur n'est pas un élément simple de 1 caractère comme \, il faut adapter avec un regex. Démonstration où ici le séparateur est le mot 'Separateur'

clear-host

$MaVariable = "Element1SeparateurElement2SeparateurElement3"
$separateur = "Separateur"

# Diviser la chaîne en un tableau d'éléments
$elements = $MaVariable -split [regex]::Escape($separateur)


#Afficher l element 1
$element1 = $elements[0]

# Afficher le résultat
Write-Output "Element 1 : $element1"

#Afficher l element 2
$element2 = $elements[1]
Write-Output "Element 2 : $element2"

#Afficher l element 3
$element3 = $elements[2]
Write-Output "Element 3 : $element3"
Lien vers le fichier : cliquez ici Copier le code

Autre cas plus compliqué (trop ?) où vous voulez faire une recherche dans un tableau qui a ici 4 lignes.
Le but est d'isoler des données dans ces lignes.
On recherche ce qu'il y a après data-host=@
et le mot doit s'arrêter avant le prochain @

Pour cela le script utilise la fonction indexof pour recherche le mot clé.
Si on le trouve, on recherche la position du prochain @
et on isole ce qu'il y a entre les 2

Clear-Host

$MotCle = "data-host=@"

$MonTableau = @()

$MonTableau += "Ligne 1 Du texte"
$MonTableau += "Ligne 2 data-host=@Robert@ et la campagne"
$MonTableau += "Ligne 3"
$MonTableau += "Ligne 4 data-host=@Loda@ et la bougie"

foreach ($UneLigne in $MonTableau){
	Write-Host $UneLigne
}

Write-host ""

foreach ($UneLigne in $MonTableau){
    $Position1 = $UneLigne.indexof($MotCle)
    if ($Position1 -gt 0) { #Si le mot clé à été trouvé
        Write-host "Position 1 (avant la prise en compte de la longueur du mot clé) : $($Position1)"
        #On récupère la position du caractère situé juste après le mot clé
        Write-host "Longueur mot clé : $($MotCle.Length)"
        $Position1 = $($Position1+$MotCle.Length)
        Write-host "Position 1 : $($Position1)"
        $Position2 = $UneLigne.indexof("@",$($Position1))
        Write-host "Position 2 : $($Position2)"
        Write-host "Position 3 : $($Position2-$Position1)"
		$MyLine =  $UneLigne.substring($Position1,$($Position2-$Position1))
		Write-host "Mot isolé : $MyLine"
    }

}
Lien vers le fichier : cliquez ici Copier le code

Résultat de ce code


2