Мой вопрос Есть ли способ выбрать виртуальное имя с помощью select-string? У меня есть эти журналы, откуда мне нужно выбрать время и имя виртуальной учетной записи. я

*>   <event seq="453211" time="2019-01-24 11:01:03.639873 -0500" app="hServer 7.45" name="I_SFS_TRANSFER_FILE" desc="Virtual filesystem: transfer file.">
      <session id="44500" service="SSH" remoteAddress="00.00.00:57292" virtualAccount="xxxxxxxx" windowsAccount="Server3\Users"/>
      <channel type="session" id="1"/>
      <sfs moduleName="FlowSfsWin" mountPath="/" code="90000" desc="Transferring file ended.">*

Это то, что я пробовал до сих пор.

New-Item "C:\clients.log" -type file -force
$strings = "virtualAccount=","time="
Foreach($string in $strings){
Get-Content 'C:\uploads.log'| 
Select-String $string1 -AllMatches | % { $_.Matches } | % { $_.Value }  |
Add-Content "C:\clients.log"
}

1 ответ1

0

Если ваш код дал нужные данные, я предполагаю, что они были не в том порядке, в котором вы хотите. Я предполагаю, что хочу иметь вместе временные метки и имена учетных записей, а не отдельный набор временных меток, за которыми следуют имена учетных записей. Я написал пример ниже, который создает объект $ myInfo, содержащий информацию, которую вы хотите получить из строк журнала. Я надеюсь, что это поможет написать ваше решение.

Я должен сказать, что регулярные выражения не мои. Мне было трудно захватить текст между цитатами. Google помог: https://stackoverflow.com/questions/13024073/regex-c-sharp-extract-text-within-double-quotes

foreach ($line in Get-Content 'C:\uploads.log') {
    $rslt = $line | Select-String -Pattern 'time=\"([^\"]*)\".*virtualAccount=\"([^\"]*)\"'
    $myinfo = [PSCustomObject]@{
        Time = $rslt.Matches.Groups[1].Value;
        Account = $rslt.Matches.Groups[2].Value
    }
    $myinfo
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .