utiliser -replace pour supprimer une chaîne de caractères spéciaux des cellules d’un csv

J’ai un fichier CSV comme:

 "localpath" "C:\Users\calabresel" "C:\Users\goslinep" "C:\Users\deangelisr" "C:\Users\bannont" "C:\Users\goodwind" 

Je cherche un moyen d’isoler simplement le nom d’utilisateur de chaque champ. Je vais ensuite interroger l’AD pour déterminer si chaque utilisateur est désactivé ou activé. Je n’ai pas été en mesure de comprendre comment obtenir le dernier morceau. Mon idée était d’utiliser -replace pour remplacer la chaîne identique par null comme ceci:

 $txt = import-csv paths1.csv | % {$_.localpath = $_.localpath -replace "C:\Users\", ""} 

Cela est revenu avec des erreurs de modèle d’expression régulière non valides, bien que je suppose que cela résultait de la chaîne cible contenant des caractères spéciaux (les barres obliques inverses). J’ai alors commencé à chercher un moyen pour que Powershell prenne la place à la place. Cela m’a amené à essayer ceci:

 $txt = import-csv paths1.csv | % {$_.localpath = $_.localpath -replace [Regex]::Escape("C:\\Users\\"), ""} 

et ça

 $txt = import-csv paths1.csv | % {$_.localpath = $_.localpath -replace "C:\\Users\\", ""} 

Ces deux méthodes arrêtent les erreurs d’expression régulière non valide et me renvoient une nouvelle ligne sans me plaindre. cependant, lorsque $txt variable $txt , elle est vide …

Je suis certain que j’aborde ce problème sous un mauvais angle et / ou avec une syntaxe incorrecte, mais je pourrais utiliser quelques conseils car je viens de commencer à travailler avec powershell il y a une semaine.

toute aide fournie serait grandement appréciée.

Ce qui suit va importer le fichier CSV et ensuite obtenir la feuille du chemin. Ie le nom d’utilisateur.

 $txt = Import-Csv paths1.csv | ForEach-Object { Split-Path $_.localpath -leaf } 

Si vous souhaitez toujours utiliser votre méthode replace, sortez simplement la partie $_.localpath = et celle-ci devrait fonctionner.

 $txt = Import-Csv C:\@@Scatch\test.csv | % { $_.localpath -replace "C:\\Users\\", ""} 

La raison pour laquelle vous ne recevez rien dans $txt est que vous mettez à jour une propriété de $_ mais ne retournez pas $_ .

En supposant que vous voulez utiliser le regex plutôt que le Split-Path

 $txt = import-csv C:\temp\test.csv | % { $_.localpath = $_.localpath -replace "C:\\Users\\", "" $_ } 

Ou

 $txt = import-csv C:\temp\test.csv | % { $_.localpath -replace "C:\\Users\\", "" } 

autre solution

 Get-Content "C:\temp\test.txt" | select @{N="Value";E={$_.split('\')[-1].replace('"', '')}} -Skip 1