2014-08-29 3 views
1

Я создаю скрипт для извлечения информации из одной системы и поместите ее в CSV для другой системы, чтобы вытащить ее. Однако я должен выполнить некоторую очистку данных. Я вытаскиваю userid из системы, и они выходят как dom \ userid. Для моей другой системы, чтобы использовать ее, я должен иметь только userid без dom. Я использовал приведенный ниже код для удаления dom, и это работает:PowerShell Замена текста в CSV

$csv = Import-Csv C:\Support\Broker.csv 
$csv | %{ If ($_.LastConnectionUser -like "*DOM*") { $_.LastConnectionUser -replace 'DOM', '' } } 
$csv | Export-Csv C:\Support\Broker.csv -NoTypeInformation -Force 

Это оставляет меня с \ userid. Как только я добавить \ к замене строки, система уроды, потому что он пытается интерпретировать \ и не может сделать замену, так что я попытался следующие

$csv = Import-Csv C:\Support\Broker.csv 
    $csv | %{ If ($_.LastConnectionUser -like "*DOM*") { $_.LastConnectionUser -replace 'DOM`\', '' } } 
    $csv | Export-Csv C:\Support\Broker.csv -NoTypeInformation -Force 

я получаю ту же ошибку

ERROR: Regular expression pattern is not valid: DOM_WFLD \. broker.ps1 (24): ERROR: At Line: 24 char: 54 ERROR: + $csv | %{ If ($_.LastConnectionUser -like "*DOM*") { $_.LastConnectionUser -repl ... ERROR: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ERROR: + CategoryInfo : InvalidOperation: (DOM_WFLD :String) [], RuntimeException ERROR: + FullyQualifiedErrorId : InvalidRegularExpression

Кажется, я не могу заставить это работать. У кого-нибудь есть идеи?

ответ

0
$csv = Import-Csv C:\Support\Broker.csv 
    $csv | %{ If ($_.LastConnectionUser -like "*DOM*") { $_.LastConnectionUser -replace 'DOM\\', '' } } 
    $csv | Export-Csv C:\Support\Broker.csv -NoTypeInformation -Force 

побег вы должны использовать это регулярное выражение один (так обратный слэш), а не PowerShell один (назад клещ)

1

В строке, содержащей $csv | %{ If ($_.LastConnectionUser -like "*DOM*") { $_.LastConnectionUser -replace 'DOM \», ''}} `

Это может быть упрощено и сделано в большей степени.

$csv | %{ $_.LastConnectionUser -replace '\w+\\'}

Если заявление что-то вроде этого на самом деле не требуется, так как действия, которые вы принимаете Doesnt значительно увеличить время обработки. Также ваш IF будет соответствовать, если имя пользователя содержит DOM, которое, я думаю, не было вашим намерением.

Который заменит все символы infront \, включая сам \. Как объясняет Дэвид, вам нужно избегать \, так как это специальный куттер в регулярных выражениях. -replace без второго параметра автоматически просто удаляет совпадение.

Смежные вопросы