2

Я пытаюсь сделать следующее:

  1. Найдите файл в папке, которая была изменена за последние 24 часа
  2. Найти определенный раздел файла
  3. Удалить строки из раздела, соответствующие определенной строке (строкам)

Вот код, который у меня есть:

$SummaryData = gci
| where {([datetime]::now - $_.lastwritetime).TotalHours -lt 24}
| get-content
| select-string 'SUMMARY' -context 0,10
| Where-Object {$_ -notmatch 'Files updated on right side'}

Код выше не возвращает объектов. Однако, если я удалю | Where-Object {$_ -notmatch 'Files updated on right side'} возвращает полный текст:

> SUMMARY
  ------------------------------------------------------------------
  Short Results: 15 copied (203.3GB)
  Operation completed at 22:11:21 on 02/02/2013
  Total duration: 01:01:49

  Copied To Right Side: 15 (203.3GB)
  Files updated on right side : 15

  Transfer amount saved due to partial file updating : 196.2GB
  Remaining actual transfer amount for eligible files: 7.1GB

Может кто-нибудь сказать мне, где я иду не так, пожалуйста?

1 ответ1

2

Как обычно с PowerShell - то, что вы видите, не является (точно) тем, что вы получаете. Данные, которые вы пытаетесь проверить с помощью Where-Object $_.Context.PostContext .

Что-то вроде следующего работало для меня:

$SummaryData = Get-ChildItem | 
    where {(New-TimeSpan -Start $_.LastWriteTime).TotalHours -lt 24} | 
    select-string 'SUMMARY' -context 0,10 | 
    Where-Object {$_.Context.PostContext -notmatch 'Files updated on right side'}

Пожалуйста, имейте в виду, что $summaryData будет содержать объекты, а не реальный текст, поэтому для получения текста вам нужно изменить команду.

РЕДАКТИРОВАТЬ: Если вы хотите просто текст и избавиться от одной строки, которую вы упомянули:

Get-ChildItem | 
    where {(New-TimeSpan -Start $_.LastWriteTime).TotalHours -lt 24} | 
    select-string 'SUMMARY' -context 0,10 | 
    foreach {@($_.Line) + @($_.Context.PostContext) } | 
    where { $_ -notmatch 'Files updated on right side' }

Это строит массив строк из $_.Line (захваченная строка) и $_.Context.PostContext (все, что было захвачено параметром -Context ), выводится как [String []] и, наконец, удаляет элемент, который вы ищете.

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