Powershell文件路径错误中的非法字符

Powershell文件路径错误中的非法字符,powershell,special-characters,filenames,ntfs,Powershell,Special Characters,Filenames,Ntfs,我正在尝试获取一个脚本来查找和删除远程主机上的特定文件。要做到这一点,脚本循环遍历几个数组中的位置和文件名列表 我需要处理的其中一个文件名为101''lyris.vbs,但我无法找到一种方法,让它在不给出错误消息的情况下检测文件test path:path中的非法字符并引用''标记。我已经搜索过这个问题,并尝试了将文件路径保存到文本文件中,然后使用get item-literalpath调用它的解决方案,但这也不起作用。我还尝试在文件路径中的每个“之前使用backtick”,但仍然得到相同的结果

我正在尝试获取一个脚本来查找和删除远程主机上的特定文件。要做到这一点,脚本循环遍历几个数组中的位置和文件名列表

我需要处理的其中一个文件名为
101''lyris.vbs
,但我无法找到一种方法,让它在不给出错误消息的情况下检测文件
test path: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)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\101" "" "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"
              }

    }
多谢各位

编辑:在每个
之前添加反勾号并使用
-literalpath
时,我收到的错误消息是:

测试路径:路径中存在非法字符。
在.\Rb.ps1:126字符:22
+if(测试路径-literalpath$newfilepath)
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:InvalidArgument:(\\AAZAJCMW0459\…````歌词.vbs:String)[测试路径],参数异常
+FullyQualifiedErrorId:ItemExistsArgumentError,Microsoft.PowerShell.Commands.TestPathCommand
当多个字符串放在一起时,PowerShell将失败。更详细地说:

是一个语法错误。要在双引号字符串中包含双引号,请使用回勾(
`
)作为转义:

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

在随后的评论中,您说这是一个恶意文件,所以可能是为了避免正常的删除尝试而精心设计了它的名称

事实上,
在Windows上的NTFS上不是合法的文件名字符,尝试直接以这样的文件为目标将失败
——任何转义技术都无济于事


您可以通过枚举/通配符匹配获得对该文件的访问权,并使用它删除该文件


更新:OP已确认通过8.3文件名进行删除有效。

编辑您的问题,并添加通过
-literalpath
和使用反勾号获得的错误消息。为了清楚起见:文件名为
101”“”“歌词.vbs
其中包括双引号空间双引号空间双引号?我的猜测是,某种工具正在引入额外的报价。文件夹的目录列表显示了什么?在
$filelist
中最后一个字符串的末尾还有一个
,我已经用添加回勾和-literalpath时收到的错误消息更新了帖子@richard,令人恼火的是,101.vbs是文件名,这是一个恶意文件。OP说他使用了反勾号,但可能使用错误。然而我希望Windows无法创建这样一个文件,无论使用何种工具。可能看起来像
的是一个类似Unicode的东西,或者是另一个数据流的一部分。或者可能这里需要一个8.3解决方案。我终于获得了一个示例,并使用了短的8.3名称!非常感谢mklement0
"c$\Users\$($_.Name)\101" "" "lyrics.vbs"
"c$\Users\$($_.Name)\101`" `"`" `"lyrics.vbs"