Недопустимые символы в 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 ответа:
В более позднем комментарии вы говорите, что это вредоносный файл, поэтому, вероятно, его имя было создано, чтобы избежать обычных попыток удалить его.
Действительно,
"
не является законным символом имени файла в 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"