Résolu Récupérer une partie du chemin d'un répertoire

Plus d'informations
il y a 3 ans 3 mois - il y a 3 ans 3 mois #30246 par Muther
Bonjour,

Cela fait plusieurs jours que je sèche pour extraire le nom du dernier répertoire d'un chemin afin de créer des target DFS en powershell.
Je m'explique, à partir d'un export groupes.csv, je récupère le chemin des répertoires bureautiques de mon administration :
"cleper";"chmesp"
"DF001EX00001";"D:\donnees\uti\reserv\G1"
"DF001EX00002";"D:\donnees\uti\reserv\G2"
"DF001EX00001";"D:\donnees\uti\reserv\G1\G1-1"
"DF001EX00003";"D:\donnees\uti\reserv\G3"
"DF001EX00001";"D:\donnees\uti\reserv\G1\G1-1\G1-1-1"
"DF001EX00004";"D:\donnees\uti\reserv\G4"

Je dois récupérer pour chaque ligne le nom du dernier répertoire, exemple pour la ligne 1 c'est G1 pour la ligne 3 c'est G1-1, etc...
Lorsque j'utilise cette regex :
$re =[regex]"\\\w+$"; import-csv C:\Temp\groupes.csv -Delimiter ";" | select cleper, chmesp, @{Name="partage";Expression={$re.matches($_.chmesp)[0] } }

Je récupère :
cleper                                  chmesp                                  partage
------                                  ------                                  -------
DF001EX00001                            D:\donnees\uti\reserv\G1                \G1
DF001EX00002                            D:\donnees\uti\reserv\G2                \G2
DF001EX00001                            D:\donnees\uti\reserv\G1\G1-1
DF001EX00003                            D:\donnees\uti\reserv\G3                \G3
DF001EX00001                            D:\donnees\uti\reserv\G1\G1-1\G1-1-1
DF001EX00004                            D:\donnees\uti\reserv\G4                \G4

D'une part il y toujours "\" dans le nom récupéré mais en plus ça ne fonctionne pas dès qu'il y a un symbole dans le nom du chemin.

Je serai preneur de conseils pour finaliser mon regex :whistle:

Merci d'avance
Dernière édition: il y a 3 ans 3 mois par Arnaud Petitjean. Raison: Remise en forme du code

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 3 mois - il y a 3 ans 3 mois #30248 par Arnaud Petitjean
Hello Muther !

Question intéressante pour un 1er post ;-).

Les admins Windows n'étant en général pas des cracks en Regex contrairement aux admins Linux, moi inclus, je vais te proposer une autre solution.

On va éclater ta chaine de caractères en prenant comme séparateur le backslash. Cela va nous retourner un objet de type tableau (de chaînes) et on va prendre le dernier élément du tableau.

Soit par exemple :
"D:\donnees\uti\reserv\G1\G1-1\G1-1-1" -split ('\\') | Select-Object -Last 1

G1-1-1

Donc au final ça pourrait donner :
Import-Csv C:\Temp\groupes.csv -Delimiter ";" | 
   Select-Object cleper, chmesp, @{Name="partage";Expression={$_.chmesp  -split ('\\') | Select-Object -Last 1 } }

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Dernière édition: il y a 3 ans 3 mois par Arnaud Petitjean.
Les utilisateur(s) suivant ont remercié: Muther

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 3 mois #30249 par Muther
Je ne connaissais pas cette possibilité, ce n'est pas habituel mais ça fonctionne.

Merci du coup de main !

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 3 mois #30253 par Arnaud Petitjean
Super !

Je passe le sujet en "Résolu".

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.127 secondes
Propulsé par Kunena