Недопустимые символы в Powershell filepath ошибка


Я пытаюсь получить скрипт для поиска и удаления определенных файлов на удаленных хостах. Для этого скрипт циклически просматривает список расположений и имен файлов в нескольких массивах.

Один из файлов, с которым мне нужно это сделать, называется 101" "" "lyrics.vbs, но я не могу найти способ для него обнаружить файл без сообщения об ошибке test-path : Illegal characters in path и ссылки на метки "". Я искал вокруг этого и попытался решение сохранения пути к файлу в текстовый файл, а затем вызвать его с помощью get-item -literalpath но и это не сработало. Я также пробовал использовать backtick ` перед каждым из " в пути к файлам, но все равно получал те же результаты. Часть кода, которая используется для этого:

 $users | ForEach-Object {
#Creating an array file locations
$filelist = @("c$Users$($_.Name)101__lyrics.vbs","c$Users$($_.Name)101" "" "lyrics.vbs","c$Users$($_.Name)AppDataRoamingMicrosoftWindowsStart MenuProgramsStartup101" "" "lyrics.vbs>")

   foreach ($file in $filelist)
    {
     $newfilepath = Join-Path "\$computer" "$file"
             if (test-path $newfilepath)
             {
             Write-Host -foregroundcolor Yellow "$newfilepath file exists"
                    try
                   {
                       Remove-Item $newfilepath -force -recurse -ErrorAction Stop
                   }
                   catch
                   {
                       Write-host -ForegroundColor red "Error while deleting $newfilepath on $computer.`n$($Error[0].Exception.Message)"

                     continue
                    }

                  Write-Host  -ForegroundColor green "$newfilepath file deleted`n"
              }

    }

Большое вам спасибо.

Edit: сообщение об ошибке, которое я получаю, добавляя обратные палочки перед каждым " и используя -literalpath:

test-path : Illegal characters in path.
At .Rb.ps1:126 char:22
+                  if (test-path -literalpath $newfilepath)
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (\AAZAJCMW0459...`" `"lyrics.vbs:String) [Test-Path], ArgumentException
    + FullyQualifiedErrorId : ItemExistsArgumentError,Microsoft.PowerShell.Commands.TestPathCommand
2 2

2 ответа:

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

Действительно, " не является законным символом имени файла в NTFS на Windows, и попытки нацелить такой файл непосредственно будут неудачными - никакая техника бегства не поможет.


Вы можете получить доступ к файлу с помощью перечисления / сопоставления подстановочных знаков, получить его краткое имя 8.3 и использовать что удалить его.

Update: ОП подтвердил, что удаление через имя файла 8.3 сработало.

$filelist = @("c$\Users\$($_.Name)\101__lyrics.vbs","c$\Users\$($_.Name)\101" "" "lyrics.vbs","c$\Users\$($_.Name)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\101" "" "lyrics.vbs>")

PowerShell терпит неудачу, когда несколько строк помещаются вместе. Более подробно:

"c$\Users\$($_.Name)\101" "" "lyrics.vbs"

- синтаксическая ошибка. Чтобы включить двойную кавычку в строку с двойными кавычками, используйте обратный ТИК (`) в качестве экранирования:

"c$\Users\$($_.Name)\101`" `"`" `"lyrics.vbs"