2014-08-29 67 views
1

我正在構建一個腳本來從一個系統中提取信息並將其放入另一個系統的CSV中以便將其拉出。我必須在這之前做一些數據清理。我從系統中拉出userid,然後以dom \ userid的形式出現。對於我的其他系統使用它,我必須擁有沒有dom的userid。我用下面的代碼來刪除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行\」, ''}} `

它可以被簡化和更多versitale。

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

如果不是真的,因爲你正在服用犯規顯著增加處理時間的操作需要的是這樣的說法。如果用戶名包含DOM,我想你的IF也不符合你的意圖。

這將取代\的所有字符,包括\本身。正如David解釋的那樣,你需要跳過\,因爲它是正則表達式中的特殊字符。沒有第二個參數的-replace會自動刪除匹配。