Powershell 文件路径错误中的非法字符
Illegal characters in Powershell filepath error
我正在尝试获取一个脚本来查找和删除远程主机上的特定文件。为此,脚本会循环访问几个数组中的位置和文件名列表。
我需要执行此操作的文件之一名为 101" "" "lyrics.vbs
但我无法找到一种方法来检测该文件而不给出错误消息 test-path : Illegal characters in path
并引用""
标记。我已经搜索过这个并尝试将文件路径保存到文本文件中然后用 get-item -literalpath
调用它的解决方案,但这也不起作用。我也尝试在文件路径中的每个 "
之前使用反引号 `
,但仍然得到相同的结果。用于此的代码部分是:
$users | ForEach-Object {
#Creating an array file locations
$filelist = @("c$\Users$($_.Name)1__lyrics.vbs","c$\Users$($_.Name)1" "" "lyrics.vbs","c$\Users$($_.Name)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup1" "" "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
时收到的错误消息是:
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
$filelist = @("c$\Users$($_.Name)1__lyrics.vbs","c$\Users$($_.Name)1" "" "lyrics.vbs","c$\Users$($_.Name)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup1" "" "lyrics.vbs>")
将多个字符串放在一起时 PowerShell 失败。更详细:
"c$\Users$($_.Name)1" "" "lyrics.vbs"
是语法错误。要在 double-quoted 字符串中包含双引号,请使用 back-tick (`
) 作为转义符:
"c$\Users$($_.Name)1`" `"`" `"lyrics.vbs"
在稍后的评论中,您说它是一个恶意文件,因此可以推测它的名字是为了逃避正常的删除尝试而设计的。
确实,"
在 Windows 上不是 NTFS 上的合法文件名字符,并试图直接 定位这样的文件将 失败 - 任何转义技术都无济于事。
您可能能够通过枚举/通配符匹配获得对文件的访问权限,obtain its short 8.3 name,并使用that删除它。
更新:OP 已确认通过 8.3 文件名删除有效。
我正在尝试获取一个脚本来查找和删除远程主机上的特定文件。为此,脚本会循环访问几个数组中的位置和文件名列表。
我需要执行此操作的文件之一名为 101" "" "lyrics.vbs
但我无法找到一种方法来检测该文件而不给出错误消息 test-path : Illegal characters in path
并引用""
标记。我已经搜索过这个并尝试将文件路径保存到文本文件中然后用 get-item -literalpath
调用它的解决方案,但这也不起作用。我也尝试在文件路径中的每个 "
之前使用反引号 `
,但仍然得到相同的结果。用于此的代码部分是:
$users | ForEach-Object {
#Creating an array file locations
$filelist = @("c$\Users$($_.Name)1__lyrics.vbs","c$\Users$($_.Name)1" "" "lyrics.vbs","c$\Users$($_.Name)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup1" "" "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
时收到的错误消息是:
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
$filelist = @("c$\Users$($_.Name)1__lyrics.vbs","c$\Users$($_.Name)1" "" "lyrics.vbs","c$\Users$($_.Name)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup1" "" "lyrics.vbs>")
将多个字符串放在一起时 PowerShell 失败。更详细:
"c$\Users$($_.Name)1" "" "lyrics.vbs"
是语法错误。要在 double-quoted 字符串中包含双引号,请使用 back-tick (`
) 作为转义符:
"c$\Users$($_.Name)1`" `"`" `"lyrics.vbs"
在稍后的评论中,您说它是一个恶意文件,因此可以推测它的名字是为了逃避正常的删除尝试而设计的。
确实,"
在 Windows 上不是 NTFS 上的合法文件名字符,并试图直接 定位这样的文件将 失败 - 任何转义技术都无济于事。
您可能能够通过枚举/通配符匹配获得对文件的访问权限,obtain its short 8.3 name,并使用that删除它。
更新:OP 已确认通过 8.3 文件名删除有效。