PowerShell: Диск с именем «@{Путь=C » не существует

#powershell

Вопрос:

Я пытаюсь выполнить поиск в каталоге файлов и извлечь все пути к файлам, в которых есть шаблон. Затем просмотрите каждый файл и найдите другой шаблон текста. Это работает, если я сделаю это вручную:

Select-String -Path "C:inetpubmailrootBadmail-Archive03c908531613052021000000A2.BAD" -Pattern ('Final-Recipient') | Select -ExpandProperty line

Это не так, если я делаю это в цикле:

 $FileList = Get-ChildItem  "C:inetpubmailrootBadmail-Archive" -Filter *.BAD | Select-String -Pattern 'Diagnostic-Code: smtp;550 5.1.1' | Select-Object Path
$FileList  = Get-ChildItem  "C:inetpubmailrootBadmail-Archive" -Filter *.BAD | Select-String -Pattern 'Diagnostic-Code: smtp;550 5.1.2' | Select-Object Path
$FileList  = Get-ChildItem  "C:inetpubmailrootBadmail-Archive" -Filter *.BAD | Select-String -Pattern 'Diagnostic-Code: smtp;550 5.2.1' | Select-Object Path



foreach($filepath in $FileList) { 
   $BADSearch = Select-String -Path $filepath -Pattern ('Final-Recipient') | Select -ExpandProperty    line
   $eMailAddress = $BADSearch.Split(";")[1]
   echo "File Path:  $filepath"
   echo $eMailAddress
}
 
 File Path:  C:inetpubmailrootBadmail-Archive03c908531613052021000000A2.BAD

Select-String : Cannot find drive. A drive with the name '@{Path=C' does not exist.
At C:ScriptsBadEmails-SQLGenerator.ps1:46 char:14
  ... BADSearch = Select-String -Path $filepath -Pattern ('Final-Recipient' ...
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      CategoryInfo          : ObjectNotFound: (@{Path=C:String) [Select-String], DriveNotFoundException
      FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.SelectStringCommand
 
 

Комментарии:

1. Вы рассматриваете ответ на Get-ChildItem вызов как строку. Это не. Вам нужно пройти правильный путь в виде строки, чтобы Select-String понравиться Select-String -Path $filepath.FullName # ...

2. @MaximilianBurszley Я только что встал на этот путь и пытался использовать $filepath.toString. Это говорит о том, что Путь пуст. В GCI я должен просто сделать что-то вроде таблицы форматов, а затем выполнить путь к файлу$. Полное имя внизу?

3. О, я не прокрутил вправо, чтобы увидеть, что вы уже используете Select-Object и выполняете другие фильтры… Это еще одна часть вашей проблемы

4. @MaximilianBurszley Я думаю, что понял твой ответ!

5. Я удалил Select-Object его из GCI, а затем просто использовал $filepath.Path

Ответ №1:

Ваша проблема заключается в том, чтобы рассматривать любой произвольный объект как строку. Select-String ожидает string экземпляр для Path параметра, но вы передаете ему результирующий MatchInfo объект, возвращенный из предыдущего Select-String вызова.

Вам нужно будет указать путь, выбрав .Path элемент из вывода предыдущей команды:

 Select-String -Path $filepath.Path # ...