Не получается разделить строку в Powershell через кавычки

Доброй ночи, есть большой файл vpn.csv, где строки имеют примерно такой вид:

"Address assigned to session,""cisco asa 192.168.0.1"",""1"",""Oct 28, 2020, 3:27:56 PM"",""VPN In Progress"",""192.168.2.1"",""0"",""192.168.0.1"",""0"",""user1"",""4""
"Address assigned to session,""cisco asa 192.168.0.1"",""1"",""Oct 28, 2020, 3:27:51 PM"",""VPN In Progress"",""192.168.2.1"",""0"",""192.168.0.1"",""0"",""[email protected]"",""4""
"Address assigned to session,""cisco asa 192.168.0.1"",""1"",""Oct 28, 2020, 3:27:46 PM"",""VPN In Progress"",""192.168.2.1"",""0"",""192.168.0.1"",""0"",""notmydomain\mary"",""4""
"Address assigned to session,""cisco asa 192.168.0.1"",""1"",""Oct 28, 2020, 3:27:46 PM"",""VPN In Progress"",""192.168.2.1"",""0"",""192.168.0.1"",""0"",""user"",""4""
"Address assigned to session,""cisco asa 192.168.0.1"",""1"",""Oct 28, 2020, 3:27:44 PM"",""VPN In Progress"",""192.168.2.1"",""0"",""192.168.0.1"",""0"",""john"",""4""
"Address assigned to session,""cisco asa 192.168.0.1"",""1"",""Oct 28, 2020, 3:27:41 PM"",""VPN In Progress"",""192.168.2.1"",""0"",""192.168.0.1"",""0"",""mydomain\myuser"",""4""
"Address assigned to session,""cisco asa 192.168.0.1"",""1"",""Oct 28, 2020, 3:27:33 PM"",""VPN In Progress"",""192.168.2.1"",""0"",""192.168.0.1"",""0"",""mydomain\user"",""4""
"Address assigned to session,""cisco asa 192.168.0.1"",""1"",""Oct 28, 2020, 3:27:26 PM"",""VPN In Progress"",""192.168.2.1"",""0"",""192.168.0.1"",""0"",""notmydomain\user"",""4"""

И есть файл all_users_AD.txt , в котором просто имена пользователей нашего домена.

Скриптом ниже пытаюсь найти vpn.csv только те строки, которые касаются только пользователей нашего домена.

$FileADUsers = $PSScriptRoot+'\all_users_AD.txt'
$FileVPNData = $PSScriptRoot+'\vpn.csv'

$ADUsers = Get-Content $FileADUsers

Get-Content $FileVPNData | ForEach-Object {
    $str = $_ -split '""'
    
    if ($ADUsers -match $str[17]) {
        $str
    }
}

шестая строка файла выдает ошибку:

выполняется разбор "mydomain\myuser" - Нераспознанная esc-последовательность \m.

Как это можно исправить?


Ответы (2 шт):

Автор решения: Ruslannnn

Пока додумался только в каждой строке, перед поиском, с помощью replace поменять \ на явно не встречающуюся в исходном файле комбинацию символов, например "___".

$FileADUsers = $PSScriptRoot+'\all_users_AD.txt'
$FileVPNData = $PSScriptRoot+'\vpn.csv'

$ADUsers = Get-Content $FileADUsers

Get-Content $FileVPNData | ForEach-Object {
    $_ = $_ -replace '\\','___'

    $str = $_ -split '""'
    
    if ($ADUsers -match $str[17]) {
        $str
    }
}

Может туповато и медленно, но додумался только до этого, и вроде работает.

→ Ссылка
Автор решения: Алексей Семенов
param(
    [IO.FileInfo]$ADUsersListFileName = 'D:\tmp\ADUersList.txt',
    [IO.FileInfo]$processedFile = "D:\tmp\in.txt"
)

[string[]]$ADUsersArray = Get-Content $ADUsersListFileName
$reader = [System.IO.StreamReader]::new($processedFile)
while($buffer = $reader.ReadLine()){
    if ([Linq.Enumerable]::Contains($ADUsersArray, ($buffer -split ',')[11].Trim('"'))){
        $buffer
    }
}
$reader.Close()
→ Ссылка